1. Model 1: implicit toxicity

In the first model (model 1), we do not have any information on what causes the toxicity of linoleic acid towards At. Based on the experimental growth curves, we know that the toxicity of linoleic acid is not immediate: at a high LA concentration, At first grows at higher levels than explained by the minimal medium growth and then dies after 3 days. We then assume a simple linear accumulation of toxicity over time.

We first start by fitting the minimal medium growth curves.

1.1 Fitting growth in the minimal medium

1.2 Fitting At monoculture parameters

## Goodness of fit of monocultures (sum of errors):
#sum(ssqAtMonoAcc(coef(fitAt))^2)

To be symmetrical between the two bacteria we also assume the same model of toxicity accumulation for Ct, even though LA does not seem to be toxic for Ct.

1.3 Fitting Ct monoculture parameters

        rc         Kc         Yc       beta      gamma 
 0.3996774 -3.0562934  9.1405722 -0.5096482 -5.2840669 

1.4 Comparing co-culture prediction with co-culture data

What about the co-culture prediction?

Error of model 1:

[1] "Sum of errors at 0.1%:  29.8969138718"
[1] "Sum of errors at 0.75%:  460.695978031655"
[1] "Sum of errors:  490.592891903455"

1.5 Parameter set of the main text

[1] "Sum of errors at 0.1%:  25.3958719552748"
[1] "Sum of errors at 0.75%:  457.594456582311"
[1] "Total sum of errors:  482.990328537586"

2. Model 2: explicit toxicity with ROS data

We import the new data of this second experiment.

2.1 Fitting growth in MM

Again we first fit the MM parameters by using both mono- and co-cultures in the no-LA condition. We perform again the fitting because the data has changed (new experiment).

2.2 Fitting ROS spontaneous dynamics in LA medium

2.3 Fitting At monoculture parameters

2.4 Fitting Ct monoculture parameters

2.5 Comparing co-cultures and mono-cultures

[1] "Sum of errors at 0.1%:  67.3249478912224"
[1] "Sum of errors at 0.75%:  168.356800912907"
[1] "Total sum of errors:  235.681748804129"

2.6 Parameter set of the main text

[1] "Sum of errors at 0.1%:  70.4431745694874"
[1] "Sum of errors at 0.75%:  77.5581367404796"
[1] "Total sum of errors:  148.001311309967"

2.7 Example of transfer trajectory

coex = read.delim("Model2_cocult_5.txt")
coex$finstate = as.factor(coex$finstate)
mod2_5transf=ggplot(data=coex, mapping = aes(x =LA_initialconc , y = dilu, fill=finstate)) +
  geom_raster(aes(fill = factor(finstate))) +
  scale_color_manual(values=c(colCt[4],"grey","pink","darkgreen"),
                     aesthetics = c("colour", "fill"),
                     name = "Species surviving after 5 transfers",
                     labels=c("Ct alone", "Extinction of both", "Coexistence: Ct and At", "At alone"),
                     breaks=c("Ct","ext","coex","At")
  ) +
  ylab(expression("Transfer dilution rate")) +
  xlab(expression("Initial linoleic acid concentration"))+
  theme(text = element_text(size=15)) +
  labs(title = "Model 2") +
  theme(plot.title = element_text(size = 15))+
  theme(aspect.ratio=1)
mod2_5transf

LS0tCnRpdGxlOiAiRml0dGluZyBjb2RlIGZvciBEaSBNYXJ0aW5vIGV0IGFsIDIwMjMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIGNvZGVfZm9sZGluZzogaGlkZQogIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKZWRpdG9yX29wdGlvbnM6CiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCmBgYHtyLCBlY2hvPUZBTFNFfQpsaWJyYXJ5KGdncGxvdDIpICNsaWJyYXJ5IGZvciBwbG90dGluZwpsaWJyYXJ5KHJlc2hhcGUyKSAjIGxpYnJhcnkgZm9yIHJlc2hhcGluZyBkYXRhICh0YWxsLW5hcnJvdyA8LT4gc2hvcnQtd2lkZSkKbGlicmFyeShkZVNvbHZlKSAjIGxpYnJhcnkgZm9yIHNvbHZpbmcgZGlmZmVyZW50aWFsIGVxdWF0aW9ucwpsaWJyYXJ5KG1pbnBhY2subG0pICN0aGUgZml0dGluZyAKbGlicmFyeShzY2FsZXMpCmxpYnJhcnkoRk1FKQpsaWJyYXJ5KHV0aWxzKQpsaWJyYXJ5KGRpZmZlcXIpCmxpYnJhcnkoTWV0QnJld2VyKQpsaWJyYXJ5KGNvd3Bsb3QpCgpjb2xhID0gIiMxYjllNzciCmNvbGMgPSAiIzc1NzBiMyIKCmNvbEF0ID0gYygiI2I3ZTRjNyIsIiMyYmRiYTYiLCIjMWI5ZTc3IiwiZGFya2dyZWVuIikKY29sQ3QgPSBjKCIjYzVjM2RmIiwiI2E1YTJjZSIsIiM3NTcwYjMiLCIjNGY0YThkIikKCmJvb2xmaXQgPSAwICNkbyB3ZSB3YW50IHRvIHJlcnVuIHRoZSBmaXR0aW5nIHBhcnQ/IAoKYGBgCgojIyAxLiBNb2RlbCAxOiBpbXBsaWNpdCB0b3hpY2l0eQoKYGBge3IsIGVjaG89RkFMU0V9CiMjIEltcG9ydGluZyBleHBlcmltZW50YWwgdGltZSBzZXJpZXMgZGF0YQoKbnJlcD0zCnRpbWUgPSBjKDAsMSwyLDMsNiw3LDgpCmV4dF90aHI9MWUtNQoKbG9hZCgiQ0ZVX2RhdGFfbW9kZWwxLlJEYXRhIikKCkF0TU1pbmkgPSBtZWFuKGMoYXMubnVtZXJpYyhBdE1NWzEsXSksYXMubnVtZXJpYyhBdE1NMlsxLF0pKSkKQXR4Mk1NaW5pID0gbWVhbihhcy5udW1lcmljKEF0eDJNTVsxLF0pKQpBdE1Nd0N0aW5pID0gbWVhbihhcy5udW1lcmljKEF0TU13Q3RbMSxdKSkKQ3RNTWluaSA9IG1lYW4oYyhhcy5udW1lcmljKEN0TU1bMSxdKSxhcy5udW1lcmljKEN0TU0yWzEsXSkpKQpDdHgyTU1pbmkgPSBtZWFuKGFzLm51bWVyaWMoQ3R4Mk1NWzEsXSkpCkN0TU13QXRpbmkgPSBtZWFuKGFzLm51bWVyaWMoQ3RNTXdBdFsxLF0pKQoKQXQwMWluaT1tZWFuKGFzLm51bWVyaWMoQXQwMVsxLF0pKQpBdDAwNWluaT1tZWFuKGFzLm51bWVyaWMoQXQwMDVbMSxdKSkKQXQwNWluaT1tZWFuKGFzLm51bWVyaWMoQXQwNVsxLF0pKQpBdDA3NWluaT1tZWFuKGFzLm51bWVyaWMoQXQwNzVbMSxdKSkKCgpDdDAxaW5pPW1lYW4oYXMubnVtZXJpYyhDdDAxWzEsXSkpCkN0MDVpbmk9bWVhbihhcy5udW1lcmljKEN0MDVbMSxdKSkKQ3QwMDVpbmk9bWVhbihhcy5udW1lcmljKEN0MDA1WzEsXSkpCkN0MDc1aW5pPW1lYW4oYXMubnVtZXJpYyhDdDA3NVsxLF0pKQoKQXRDdDAxaW5pPW1lYW4oYXMubnVtZXJpYyhBdEN0MDFbMSxdKSkKQXRDdDA3NWluaT1tZWFuKGFzLm51bWVyaWMoQXRDdDA3NVsxLF0pKQpDdEF0MDFpbmk9bWVhbihhcy5udW1lcmljKEN0QXQwMVsxLF0pKQpDdEF0MDc1aW5pPW1lYW4oYXMubnVtZXJpYyhDdEF0MDc1WzEsXSkpCgpBdDAwNSR0aW1lID0gdGltZQpBdDAxJHRpbWUgPSB0aW1lCkF0MDUkdGltZSA9IHRpbWUKQXQwNzUkdGltZSA9IHRpbWUKCkN0MDA1JHRpbWU9dGltZQpDdDAxJHRpbWU9dGltZQpDdDA1JHRpbWU9dGltZQpDdDA3NSR0aW1lPXRpbWUKCmBgYAoKSW4gdGhlIGZpcnN0IG1vZGVsIChtb2RlbCAxKSwgd2UgZG8gbm90IGhhdmUgYW55IGluZm9ybWF0aW9uIG9uIHdoYXQgY2F1c2VzIHRoZSB0b3hpY2l0eSBvZiBsaW5vbGVpYyBhY2lkIHRvd2FyZHMgQXQuIEJhc2VkIG9uIHRoZSBleHBlcmltZW50YWwgZ3Jvd3RoIGN1cnZlcywgd2Uga25vdyB0aGF0IHRoZSB0b3hpY2l0eSBvZiBsaW5vbGVpYyBhY2lkIGlzIG5vdCBpbW1lZGlhdGU6IGF0IGEgaGlnaCBMQSBjb25jZW50cmF0aW9uLCBBdCBmaXJzdCBncm93cyBhdCBoaWdoZXIgbGV2ZWxzIHRoYW4gZXhwbGFpbmVkIGJ5IHRoZSBtaW5pbWFsIG1lZGl1bSBncm93dGggYW5kIHRoZW4gZGllcyBhZnRlciAzIGRheXMuIFdlIHRoZW4gYXNzdW1lIGEgc2ltcGxlIGxpbmVhciBhY2N1bXVsYXRpb24gb2YgdG94aWNpdHkgb3ZlciB0aW1lLgoKV2UgZmlyc3Qgc3RhcnQgYnkgZml0dGluZyB0aGUgbWluaW1hbCBtZWRpdW0gZ3Jvd3RoIGN1cnZlcy4KCiMjIyAxLjEgRml0dGluZyBncm93dGggaW4gdGhlIG1pbmltYWwgbWVkaXVtCgpgYGB7ciwgZWNobz1GQUxTRX0KIyMgR2VuZXJhbCBmdW5jdGlvbnMgCmV2ZW50ZnVuIDwtIGZ1bmN0aW9uKHQsIHksIHBhcm1zKXsKICB3aXRoIChhcy5saXN0KHkpLHsKICAgIHlbeSA8PSBleHRfdGhyXSA8LSAwCiAgICByZXR1cm4oeSkKICB9KQp9CgojIyBGaXR0aW5nIHRoZSBncm93dGggb2YgQXQgYW5kIEN0IGluIHRoZSBuby1MQSBjb25kaXRpb24gKG1pbmltYWwgbWVkaXVtKSB1c2luZyBib3RoIGNvY3VsdHVyZSBhbmQgbW9ub2N1dHVyZSBvZiBBdCBhbmQgQ3QgaW4gdGhlIG1pbmltYWwgbWVkaXVtCgojT0RFIHN5c3RlbSBmb3IgdGhlIG1pbmltYWwgbWVkaXVtIChhcmJpdHJhcnkgdW5rbm93biBudXRyaWVudCBjb25jZW50cmF0aW9uKQpGdW5jQ29NTT1mdW5jdGlvbih0LHN0YXRlLHBhcm1zKXsKICB3aXRoKGFzLmxpc3QoYyhzdGF0ZSxwYXJtcykpLCB7CiAgICBkQmFjdDEgPSBybjEqQ29tcC8oQ29tcCArIEtuMSkqQmFjdDEgICAgI2JhY3RlcmlhIDE6IEN0CiAgICBkQmFjdDIgPSBybjIqQ29tcC8oQ29tcCArIEtuMikqQmFjdDIgICAjYmFjdGVyaWEgMjogQXQKICAgIGRDb21wID0gLSAxL1luMSpybjEqQ29tcC8oQ29tcCArIEtuMSkqQmFjdDEgLSAxL1luMipybjIqQ29tcC8oQ29tcCArIEtuMikqQmFjdDIgI3RoZSBtaW5pbWFsIG1lZGl1bSBudXRyaWVudAogICAgcmV0dXJuKGxpc3QoYyhkQmFjdDEsZEJhY3QyLGRDb21wKSkpCiAgfSkKfQoKCiMjIyB0aGUgcmVzaWR1YWwgZnVuY3Rpb24sIHVzaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxvZyBvZiBlYWNoIGV4cGVyaW1lbnRhbCB0aW1lIHBvaW50IGFuZCBwcmVkaWN0ZWQgdGltZSBwb2ludCBhYnVuZGFuY2VzLgoKc3NxRnVuY0NvTU09ZnVuY3Rpb24ocGFyYSl7CiAgc3NxcmVzID0ge30KICAjIHRoZSBpbml0YWwgY29uY2VudHJhdGlvbiBpcyBrbm93biAKICB0aT1jKHNlcSgwLHRtYXgsMC4wMSksYygwLDEsMiwzLDYsNyw4KSkKICB0aT1zb3J0KHVuaXF1ZSh0aSkpCiAgCiAgCiAgcGFybXNlc3RpbSA9IDEwXnBhcmEgCiAgI2NvY3VsdHVyZSBvZiBDdCBhbmQgQXQKICBvdXRjbz1vZGUoeT1jKEJhY3QxPUN0TU13QXRpbmksQmFjdDI9QXRNTXdDdGluaSxDb21wPWNvbXBpbmkpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvTU0scGFybXM9cGFybXNlc3RpbSwgZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgIyBTZWxlY3QgdGhlIHRpbWUgcG9pbnRzIGZyb20gdGhlIG1vZGVsIHdoaWNoIGNvcnJlc3BvbmQgdG8gZXhwZXJpbWVudGFsIGRhdGEgdGltZSBwb2ludHMKICBvdXRjb2RmPWRhdGEuZnJhbWUob3V0Y28pCiAgb3V0Y29kZj1vdXRjb2RmW291dGNvZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGNvZGZbb3V0Y29kZjxleHRfdGhyXT1leHRfdGhyCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzID0gYyhzc3FyZXMsIGxvZyhvdXRjb2RmJEJhY3QxKSAtIGxvZyhDdE1Nd0F0WyxpXSksIGxvZyhvdXRjb2RmJEJhY3QyKSAtIGxvZyhBdE1Nd0N0WyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwogIH0KICAKICAjbW9ub2N1bHR1cmUgb2YgQ3QKICBvdXRDdD1vZGUoeT1jKEJhY3QxPUN0TU1pbmksQmFjdDI9MCxDb21wPWNvbXBpbmkpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvTU0scGFybXM9cGFybXNlc3RpbSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKICAjIEZpbHRlciBkYXRhIHRoYXQgY29udGFpbnMgdGltZSBwb2ludHMgd2hlcmUgZGF0YSBpcyBhdmFpbGFibGUKICBvdXRDdGRmPWRhdGEuZnJhbWUob3V0Q3QpCiAgb3V0Q3RkZj1vdXRDdGRmW291dEN0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dEN0ZGZbb3V0Q3RkZjxleHRfdGhyXT1leHRfdGhyCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgI3NzcXJlcyA9IGMoc3NxcmVzLCBsb2cob3V0Q3RkZiRCYWN0MSkgLSBsb2coQ3RNTVssaV0pLCBsb2cob3V0Q3RkZiRCYWN0MSkgLSBsb2coQ3RNTTJbLGldKSkKICAgIHNzcXJlcyA9IGMoc3NxcmVzLCBsb2cob3V0Q3RkZiRCYWN0MSkgLSBsb2coQ3RNTVssaV0pKSNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwogIH0KICAKICAjbW9ub2N1bHR1cmUgb2YgQ3Qgd2l0aCBhIGRpZmZlcmVudCBpbml0aWFsIGFidW5kYW5jZQogIG91dEN0Mj1vZGUoeT1jKEJhY3QxPUN0eDJNTWluaSxCYWN0Mj0wLENvbXA9Y29tcGluaSksdGltZXM9dGksZnVuYz1GdW5jQ29NTSxwYXJtcz1wYXJtc2VzdGltLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogICMgRmlsdGVyIGRhdGEgdGhhdCBjb250YWlucyB0aW1lIHBvaW50cyB3aGVyZSBkYXRhIGlzIGF2YWlsYWJsZQogIG91dEN0MmRmPWRhdGEuZnJhbWUob3V0Q3QyKQogIG91dEN0MmRmPW91dEN0MmRmW291dEN0MmRmJHRpbWUgJWluJSB0aW1lLF0KICBvdXRDdDJkZltvdXRDdDJkZjxleHRfdGhyXT1leHRfdGhyCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzID0gYyhzc3FyZXMsIGxvZyhvdXRDdDJkZiRCYWN0MSkgLSBsb2coQ3R4Mk1NWyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwogIH0KICAKICAjbW9ub2N1bHR1cmUgb2YgQXQKICBvdXRBdD1vZGUoeT1jKEJhY3QxPTAsQmFjdDI9QXRNTWluaSxDb21wPWNvbXBpbmkpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvTU0scGFybXM9cGFybXNlc3RpbSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKICAjIEZpbHRlciBkYXRhIHRoYXQgY29udGFpbnMgdGltZSBwb2ludHMgd2hlcmUgZGF0YSBpcyBhdmFpbGFibGUKICBvdXRBdGRmPWRhdGEuZnJhbWUob3V0QXQpCiAgb3V0QXRkZj1vdXRBdGRmW291dEF0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dEF0ZGZbb3V0QXRkZjxleHRfdGhyXT1leHRfdGhyCiAgCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzID0gYyhzc3FyZXMsIGxvZyhvdXRBdGRmJEJhY3QyKSAtIGxvZyhBdE1NWyxpXSkpCiAgfQogIAogICNtb25vY3VsdHVyZSBvZiBBdCB3aXRoIGEgZGlmZmVyZW50IGluaXRpYWwgY29uZGl0aW9uCiAgb3V0QXQyPW9kZSh5PWMoQmFjdDE9MCxCYWN0Mj1BdHgyTU1pbmksQ29tcD1jb21waW5pKSx0aW1lcz10aSxmdW5jPUZ1bmNDb01NLHBhcm1zPXBhcm1zZXN0aW0sZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0QXQyZGY9ZGF0YS5mcmFtZShvdXRBdDIpCiAgb3V0QXQyZGY9b3V0QXQyZGZbb3V0QXQyZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dEF0MmRmW291dEF0MmRmPGV4dF90aHJdPWV4dF90aHIKICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMgPSBjKHNzcXJlcywgbG9nKG91dEF0MmRmJEJhY3QyKSAtIGxvZyhBdHgyTU1bLGldKSkgI2FkZCByZXNpZHVhbCBjb21wYXJpbmcgZXN0aW1hdGVkIHdpdGggdGhlIGRpZmZlcmVudCByZXBsaWNhdGVzCiAgfQogIAoKICAjIHJldHVybiBwcmVkaWN0ZWQgdnMgZXhwZXJpbWVudGFsIHJlc2lkdWFsCiAgcmV0dXJuKHNzcXJlcykKfQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFfQojIyBzZXR0aW5nIGFuIGFyYml0cmFyeSB2YWx1ZSBmb3IgdGhlIG1pbmltYWwgbWVkaXVtIGluaXRpYWwgY29uY2VudHJhdGlvbgpjb21waW5pPTAuMDEKCnRtYXg9OAp0aT1jKHNlcSgwLHRtYXgsMC4wMSksYygwLDEsMiwzLDYsNyw4KSkKdGk9c29ydCh1bmlxdWUodGkpKQpwYXJtc2VzdGltID0gYyhybjE9MSwgcm4yPTEsIFluMT05LCBZbjI9OCxLbjE9LTIsS24yPS0yKQppZiAoYm9vbGZpdCkge2ZpdE1NPW1vZEZpdChwPXBhcm1zZXN0aW0sZj1zc3FGdW5jQ29NTSl9CmNvZWZzID0gY29lZihmaXRNTSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRX0KI3N1bShzc3FGdW5jQ29NTShjb2VmcyleMikKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgZmlnLndpZHRoPTUsZmlnLmhlaWdodD00fQp0cmFuc3BhciA9IDAuOAojIFBsb3R0aW5nIHRoZSBncm93dGggaW4gTU0gKyB0aGUgZml0CnBsb3QoQXRNTVssMV1+dGltZSx0eXBlPSJsIix5bGltPWMoMWU1LDVlNyksbG9nPSJ5Iixjb2w9YWxwaGEoY29sYSx0cmFuc3BhciksbHdkPTIseWxhYj0iQ0ZVL21MIiwgbWFpbj0iQXQgYW5kIEN0IGluIG1pbmltYWwgbWVkaXVtIikKcG9pbnRzKEF0TU1bLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xhLHRyYW5zcGFyKSkKcG9pbnRzKEF0TU1bLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xhLHRyYW5zcGFyKSkKcG9pbnRzKEF0TU1bLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xhLHRyYW5zcGFyKSkKbGluZXMoQXRNTVssMl1+dGltZSxjb2w9YWxwaGEoY29sYSx0cmFuc3BhciksbHdkPTIpCmxpbmVzKEF0TU1bLDNdfnRpbWUsY29sPWFscGhhKGNvbGEsdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQXRNTXdDdFssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbGEsdHJhbnNwYXIpKQpsaW5lcyhBdE1Nd0N0WywxXX50aW1lLHBjaD0xOSxjb2w9YWxwaGEoY29sYSx0cmFuc3BhciksbHR5PSJkYXNoZWQiLGx3ZD0yKQpwb2ludHMoQXRNTXdDdFssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbGEsdHJhbnNwYXIpKQpsaW5lcyhBdE1Nd0N0WywyXX50aW1lLHBjaD0xOSxjb2w9YWxwaGEoY29sYSx0cmFuc3BhciksbHR5PSJkYXNoZWQiLGx3ZD0yKQpwb2ludHMoQXRNTXdDdFssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbGEsdHJhbnNwYXIpKQpsaW5lcyhBdE1Nd0N0WywzXX50aW1lLHBjaD0xOSxjb2w9YWxwaGEoY29sYSx0cmFuc3BhciksbHR5PSJkYXNoZWQiLGx3ZD0yKQpsaW5lcyhDdE1NWywxXX50aW1lLGNvbD1hbHBoYShjb2xjLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEN0TU1bLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xjLHRyYW5zcGFyKSkKcG9pbnRzKEN0TU1bLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xjLHRyYW5zcGFyKSkKcG9pbnRzKEN0TU1bLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xjLHRyYW5zcGFyKSkKbGluZXMoQ3RNTVssMl1+dGltZSxjb2w9YWxwaGEoY29sYyx0cmFuc3BhciksbHdkPTIpCmxpbmVzKEN0TU1bLDNdfnRpbWUsY29sPWFscGhhKGNvbGMsdHJhbnNwYXIpLGx3ZD0yKQpsaW5lcyhDdE1NMlssMV1+dGltZSxjb2w9YWxwaGEoY29sYyx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhDdE1Nd0F0WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sYyx0cmFuc3BhcikpCmxpbmVzKEN0TU13QXRbLDFdfnRpbWUscGNoPTE5LGNvbD1hbHBoYShjb2xjLHRyYW5zcGFyKSxsdHk9ImRhc2hlZCIsbHdkPTIpCnBvaW50cyhDdE1Nd0F0WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sYyx0cmFuc3BhcikpCmxpbmVzKEN0TU13QXRbLDJdfnRpbWUscGNoPTE5LGNvbD1hbHBoYShjb2xjLHRyYW5zcGFyKSxsdHk9ImRhc2hlZCIsbHdkPTIpCnBvaW50cyhDdE1Nd0F0WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sYyx0cmFuc3BhcikpCmxpbmVzKEN0TU13QXRbLDNdfnRpbWUscGNoPTE5LGNvbD1hbHBoYShjb2xjLHRyYW5zcGFyKSxsdHk9ImRhc2hlZCIsbHdkPTIpCmxlZ2VuZCh4PSJib3R0b21yaWdodCIsCiAgICAgICBjKCJBdCIsIkF0IChDdCkiLCJDdCIsIkN0IChBdCkiKSwKICAgICAgIGNvbD1jKGFscGhhKGNvbGEsdHJhbnNwYXIpLGFscGhhKGNvbGEsdHJhbnNwYXIpLGFscGhhKGNvbGMsdHJhbnNwYXIpLGFscGhhKGNvbGMsdHJhbnNwYXIpKSwKICAgICAgIGx0eT1jKDEsMiwxLDIpLAogICAgICAgbHdkPWMoMSwxLDEsMSksCiAgICAgICBwY2g9YygyMCwyMCwyMCwyMCksYnR5PSJuIikKCnBhcjEwID0gMTBeY29lZnMKc29sPW9kZSh5PWMoQmFjdDE9Q3RNTXdBdGluaSxCYWN0Mj1BdE1Nd0N0aW5pLENvbXA9Y29tcGluaSksdGltZXM9dGksZnVuYz1GdW5jQ29NTSxwYXJtcz1wYXIxMCxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcG9pbnRzKEJhY3QxfnRpLHNvbCx0eXBlPSJsIixsd2Q9NCxsdHk9ImRhc2hlZCIsY29sPWNvbGMpCnBvaW50cyhCYWN0Mn50aSxzb2wsdHlwZT0ibCIsbHdkPTQsbHR5PSJkYXNoZWQiLGNvbD1jb2xhKQpzcz1vZGUoeT1jKEJhY3QxPUN0TU1pbmksQmFjdDI9MCxDb21wPWNvbXBpbmkpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvTU0scGFybXM9cGFyMTAsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCnBvaW50cyhCYWN0MX50aSxzcyx0eXBlPSJsIixsd2Q9NCxjb2w9Y29sYykKc3MyPW9kZSh5PWMoQmFjdDE9MCxCYWN0Mj1BdE1NaW5pLENvbXA9Y29tcGluaSksdGltZXM9dGksZnVuYz1GdW5jQ29NTSxwYXJtcz1wYXIxMCxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcG9pbnRzKEJhY3QyfnRpLHNzMix0eXBlPSJsIixsd2Q9NCxjb2w9Y29sYSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRX0KcGFybXNBdE1NID0gYyhybiA9IGFzLmxpc3QocGFyMTApJHJuMiwgS24gPSAgYXMubGlzdChwYXIxMCkkS24yLCBZbiA9ICBhcy5saXN0KHBhcjEwKSRZbjIpCnBhcm1zQ3RNTSA9IGMocm4gPSBhcy5saXN0KHBhcjEwKSRybjEsIEtuID0gIGFzLmxpc3QocGFyMTApJEtuMSwgWW4gPSAgYXMubGlzdChwYXIxMCkkWW4xKQpgYGAKCiMjIyAxLjIgRml0dGluZyBBdCBtb25vY3VsdHVyZSBwYXJhbWV0ZXJzCgoKYGBge3IsZWNobz1GQUxTRX0KIyMgYWNjdW11bGF0aW9uIG9mIHRveGljaXR5CkZ1bmNUb3ggPSBmdW5jdGlvbih0LCBiZXRhLCBnYW1tYSkgewogIHJldHVybiAoYmV0YSArIGdhbW1hKnQpCn0KCkZ1bmNNb25vQWNjPWZ1bmN0aW9uKHQsc3RhdGUscGFybXMpewogIHdpdGgoYXMubGlzdChjKHN0YXRlLHBhcm1zKSksIHsKICAgIGRCYWN0ID0gcm4qTnUvKE51ICsgS24pKkJhY3QgKyByYypDb21wLyhDb21wICsgS2MpKkJhY3QgLSBGdW5jVG94KHQsYmV0YSxnYW1tYSkqQ29tcCpCYWN0ICAjYmFjdGVyaWEKICAgIGROdSA9IC0gMS9ZbipybipOdS8oTnUgKyBLbikqQmFjdCAjY29tcG91bmQgaW4gTU0KICAgIGRDb21wID0gLSAxL1ljKnJjKkNvbXAvKENvbXAgKyBLYykqQmFjdCAjbGlub2xlaWMgYWNpZAogICAgcmV0dXJuKGxpc3QoYyhkQmFjdCxkTnUsZENvbXApKSkKICB9KQp9CmBgYAoKCmBgYHtyLGVjaG89RkFMU0V9CnNzcUF0TW9ub0FjYz1mdW5jdGlvbihwYXJtc2VzdGltKXsKICBzc3FyZXN0b3QgPSB7fQogIHRpPWMoc2VxKDAsdG1heCwwLjAxKSxjKDAsMSwyLDMsNiw3LDgpKQogIHRpPXNvcnQodW5pcXVlKHRpKSkKICAKICBwYXJtc29kZSA9IGMoMTBecGFybXNlc3RpbSwgcGFybXNBdE1NKSAjIHRoZSBtaW5pbWFsIG1lZGl1bSBwYXJhbWV0ZXJzIGFyZSBmaXhlZAoKICAgICNncm93dGggaW4gMC4wNSUKICBvdXQ9b2RlKHk9YyhCYWN0PUF0MDA1aW5pLE51PWNvbXBpbmksQ29tcD0wLjA1KSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RlLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogICMgRmlsdGVyIGRhdGEgdGhhdCBjb250YWlucyB0aW1lIHBvaW50cyB3aGVyZSBkYXRhIGlzIGF2YWlsYWJsZQogIG91dGRmPWRhdGEuZnJhbWUob3V0KQogIG91dGRmPW91dGRmW291dGRmJHRpbWUgJWluJSB0aW1lLF0KICBvdXRkZltvdXRkZjxleHRfdGhyXT1leHRfdGhyCiAgc3NxcmVzMDA1ID0ge30KICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMwMDUgPSBjKHNzcXJlczAwNSwgbG9nKG91dGRmJEJhY3QpIC0gbG9nKEF0MDA1WyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwogIH0KICAKICAjZ3Jvd3RoIGluIDAuMSUKICBvdXQ9b2RlKHk9YyhCYWN0PUF0MDFpbmksTnU9Y29tcGluaSxDb21wPTAuMSksdGltZXM9dGksZnVuYz1GdW5jTW9ub0FjYyxwYXJtcz1wYXJtc29kZSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKICAjIEZpbHRlciBkYXRhIHRoYXQgY29udGFpbnMgdGltZSBwb2ludHMgd2hlcmUgZGF0YSBpcyBhdmFpbGFibGUKICBvdXRkZj1kYXRhLmZyYW1lKG91dCkKICBvdXRkZj1vdXRkZltvdXRkZiR0aW1lICVpbiUgdGltZSxdCiAgb3V0ZGZbb3V0ZGY8ZXh0X3Rocl09ZXh0X3RocgogIHNzcXJlczAxID0ge30KICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMwMSA9IGMoc3NxcmVzMDEsIGxvZyhvdXRkZiRCYWN0KSAtIGxvZyhBdDAxWyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwogIH0KICAKICAjZ3Jvd3RoIGluIDAuNSUKICBvdXQyPW9kZSh5PWMoQmFjdD1BdDA1aW5pLE51PWNvbXBpbmksQ29tcD0wLjUpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgIyBGaWx0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIHRpbWUgcG9pbnRzIHdoZXJlIGRhdGEgaXMgYXZhaWxhYmxlCiAgb3V0ZGYyPWRhdGEuZnJhbWUob3V0MikKICBvdXRkZjI9b3V0ZGYyW291dGRmMiR0aW1lICVpbiUgdGltZSxdCiAgb3V0ZGYyW291dGRmMjxleHRfdGhyXT1leHRfdGhyCiAgc3NxcmVzMDUgPSB7fQogIGZvciAoaSBpbiAxOjMpIHsjd2UgcmVtb3ZlIHRoZSByZXBsaWNhdGUgd2hlcmUgQXQgZGllcyBhdCAwLjUlCiAgICBzc3FyZXMwNSA9IGMoc3NxcmVzMDUsIGxvZyhvdXRkZjIkQmFjdCkgLSBsb2coQXQwNVssaV0pKSAjYWRkIHJlc2lkdWFsIGNvbXBhcmluZyBlc3RpbWF0ZWQgd2l0aCB0aGUgZGlmZmVyZW50IHJlcGxpY2F0ZXMKICB9CiAgCiAgI2dyb3d0aCBpbiAwLjc1JQogIG91dDI9b2RlKHk9YyhCYWN0PUF0MDc1aW5pLE51PWNvbXBpbmksQ29tcD0wLjc1KSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RlLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogICMgRmlsdGVyIGRhdGEgdGhhdCBjb250YWlucyB0aW1lIHBvaW50cyB3aGVyZSBkYXRhIGlzIGF2YWlsYWJsZQogIG91dGRmMj1kYXRhLmZyYW1lKG91dDIpCiAgb3V0ZGYyPW91dGRmMltvdXRkZjIkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmMltvdXRkZjI8ZXh0X3Rocl09ZXh0X3RocgogIHNzcXJlczA3NT17fQogIGZvciAoaSBpbiAxOm5yZXApIHsKICAgIHNzcXJlczA3NSA9IGMoc3NxcmVzMDc1LCBsb2cob3V0ZGYyJEJhY3QpIC0gbG9nKEF0MDc1WyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwogIH0KICAKICBzc3FyZXMgPSBjKHNzcXJlczAwNSxzc3FyZXMwMSxzc3FyZXMwNSxzc3FyZXMwNzUpCiAgCiAgIyByZXR1cm4gcHJlZGljdGVkIHZzIGV4cGVyaW1lbnRhbCByZXNpZHVhbAogIHJldHVybihuYS5vbWl0KHNzcXJlcykpCn0KYGBgCgpgYGB7cixlY2hvPUZBTFNFfQpzc3FBdE1vbm9BY2MwMTA3NT1mdW5jdGlvbihwYXIpewogIHNzcXJlc3RvdCA9IHt9CiAgdGk9YyhzZXEoMCx0bWF4LDAuMDEpLGMoMCwxLDIsMyw2LDcsOCkpCiAgdGk9c29ydCh1bmlxdWUodGkpKQogIAogIyBwYXJtc29kZSA9IGMoMTBecGFybXNlc3RpbSwgcGFybXNBdE1NKSAjIHRoZSBtaW5pbWFsIG1lZGl1bSBwYXJhbWV0ZXJzIGFyZSBmaXhlZAogIHBhcm1zb2RlID0gcGFyCiAgCiAgI2dyb3d0aCBpbiAwLjElCiAgb3V0PW9kZSh5PWMoQmFjdD1BdDAxaW5pLE51PWNvbXBpbmksQ29tcD0wLjEpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgIyBGaWx0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIHRpbWUgcG9pbnRzIHdoZXJlIGRhdGEgaXMgYXZhaWxhYmxlCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICBzc3FyZXMwMSA9IHt9CiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzMDEgPSBjKHNzcXJlczAxLCBsb2cob3V0ZGYkQmFjdCkgLSBsb2coQXQwMVssaV0pKSAjYWRkIHJlc2lkdWFsIGNvbXBhcmluZyBlc3RpbWF0ZWQgd2l0aCB0aGUgZGlmZmVyZW50IHJlcGxpY2F0ZXMKICB9CiAgCiAKICAKICAjZ3Jvd3RoIGluIDAuNzUlCiAgb3V0Mj1vZGUoeT1jKEJhY3Q9QXQwNzVpbmksTnU9Y29tcGluaSxDb21wPTAuNzUpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgIyBGaWx0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIHRpbWUgcG9pbnRzIHdoZXJlIGRhdGEgaXMgYXZhaWxhYmxlCiAgb3V0ZGYyPWRhdGEuZnJhbWUob3V0MikKICBvdXRkZjI9b3V0ZGYyW291dGRmMiR0aW1lICVpbiUgdGltZSxdCiAgb3V0ZGYyW291dGRmMjxleHRfdGhyXT1leHRfdGhyCiAgc3NxcmVzMDc1PXt9CiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzMDc1ID0gYyhzc3FyZXMwNzUsIGxvZyhvdXRkZjIkQmFjdCkgLSBsb2coQXQwNzVbLGldKSkgI2FkZCByZXNpZHVhbCBjb21wYXJpbmcgZXN0aW1hdGVkIHdpdGggdGhlIGRpZmZlcmVudCByZXBsaWNhdGVzCiAgfQogIAogIHNzcXJlcyA9IGMoc3NxcmVzMDEsc3NxcmVzMDc1KQogIAogICMgcmV0dXJuIHByZWRpY3RlZCB2cyBleHBlcmltZW50YWwgcmVzaWR1YWwKICByZXR1cm4obmEub21pdChzc3FyZXMpKQp9CgpgYGAKCmBgYHtyLGVjaG8gPSBGQUxTRX0KcGFybXN0ZXN0ID0gbG9nMTAoYyhyYyA9IDYsIEtjID0gMC4wNiwgWWM9M2U5LCAgYmV0YSA9IDUsIGdhbW1hPTIpKSAjbWFudWFsIGZpdAppZiAoYm9vbGZpdCkge2ZpdEF0ID0gbW9kRml0KGYgPSBzc3FBdE1vbm9BY2MscD1wYXJtc3Rlc3QsamFjID0gTlVMTCl9CgoKYGBgCgpgYGB7cixlY2hvID0gRkFMU0UsZmlnLndpZHRoPTUsZmlnLmhlaWdodD00fQp0cmFuc3BhciA9IDAuOAoKcGxvdChBdDAwNVssMV1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbMV0sdHJhbnNwYXIpLCB5bGFiPSJDRlUvbUwiLGxvZz0ieSIseWxpbT1jKDFlMSwxZTkpLG1haW49IkZpdHRpbmcgQXQgaW4gbW9ub2N1bHR1cmUgKG1vZGVsIDEpIixsd2Q9MikKcG9pbnRzKEF0MDA1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMV0sdHJhbnNwYXIpKQpsaW5lcyhBdDAwNVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbMV0sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQXQwMDVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsxXSx0cmFuc3BhcikpCmxpbmVzKEF0MDA1WywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsxXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDAwNVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzFdLHRyYW5zcGFyKSkKCnBvaW50cyhBdDAxWywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDAxWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpsaW5lcyhBdDAxWywyXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDAxWywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpsaW5lcyhBdDAxWywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDAxWywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQoKbGluZXMoQXQwNVssMV1+dGltZSxsd2Q9Mixjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpKQpwb2ludHMoQXQwNVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzNdLHRyYW5zcGFyKSkKbGluZXMoQXQwNVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQXQwNVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzNdLHRyYW5zcGFyKSkKI2xpbmVzKEF0MDVbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzNdLHRyYW5zcGFyKSxsd2Q9MikKI3BvaW50cyhBdDA1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpKQoKbGluZXMoQXQwNzVbLDFdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEF0MDc1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpKQpsaW5lcyhBdDA3NVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQXQwNzVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhcikpCmxpbmVzKEF0MDc1WywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDA3NVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSkKbGVnZW5kKCJib3R0b21sZWZ0IiwKICAgICAgIGxlZ2VuZD1jKCIwLjA1JSIsIjAuMSUiLCIwLjUlIiwiMC43NSUiLCJkYXRhIiwiZml0IiksCiAgICAgICBjb2w9Yyhjb2xBdCwiYmxhY2siLGFscGhhKCJibGFjayIsMC45KSksCiAgICAgICBwY2g9YygxOSwxOSwxOSwxOSwxOSxOQSksYnR5PSJuIixsd2Q9YygyLDIsMiwyLDIsNSksbHR5PWMoMSwxLDEsMSwxLDMpKQpwYXJtc29kQXQgPSBjKDEwXmNvZWYoZml0QXQpLCBwYXJtc0F0TU0pCgoKb3V0PW9kZSh5PWMoQmFjdCA9IEF0MDA1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuMDUpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZEF0LGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQpwb2ludHMob3V0WywyXX5vdXRbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1hbHBoYShjb2xBdFsxXSwwLjkpLGx0eT0iZG90dGVkIikKb3V0PW9kZSh5PWMoQmFjdCA9IEF0MDFpbmksTnU9Y29tcGluaSxDb21wID0gMC4xKSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RBdCxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcG9pbnRzKG91dFssMl1+b3V0WywxXSx0eXBlPSJsIixsd2Q9NSxjb2w9YWxwaGEoY29sQXRbMl0sMC45KSxsdHk9ImRvdHRlZCIpCm91dD1vZGUoeT1jKEJhY3QgPSBBdDA3NWluaSxOdT1jb21waW5pLENvbXAgPSAwLjc1KSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RBdCxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcG9pbnRzKG91dFssMl1+b3V0WywxXSx0eXBlPSJsIixsd2Q9NSxjb2w9YWxwaGEoY29sQXRbNF0sMC45KSxsdHk9ImRvdHRlZCIpCm91dD1vZGUoeT1jKEJhY3QgPSBBdDA1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuNSksdGltZXM9dGksZnVuYz1GdW5jTW9ub0FjYyxwYXJtcz1wYXJtc29kQXQsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCnBvaW50cyhvdXRbLDJdfm91dFssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWFscGhhKGNvbEF0WzNdLDAuOSksbHR5PSJkb3R0ZWQiKQpgYGAKCmBgYHtyLGVjaG8gPSBUUlVFfQojIyBHb29kbmVzcyBvZiBmaXQgb2YgbW9ub2N1bHR1cmVzIChzdW0gb2YgZXJyb3JzKToKI3N1bShzc3FBdE1vbm9BY2MoY29lZihmaXRBdCkpXjIpCmBgYAoKVG8gYmUgc3ltbWV0cmljYWwgYmV0d2VlbiB0aGUgdHdvIGJhY3RlcmlhIHdlIGFsc28gYXNzdW1lIHRoZSBzYW1lIG1vZGVsIG9mIHRveGljaXR5IGFjY3VtdWxhdGlvbiBmb3IgQ3QsIGV2ZW4gdGhvdWdoIExBIGRvZXMgbm90IHNlZW0gdG8gYmUgdG94aWMgZm9yIEN0LgoKIyMjIDEuMyBGaXR0aW5nIEN0IG1vbm9jdWx0dXJlIHBhcmFtZXRlcnMKCmBgYHtyLGVjaG89RkFMU0V9CnNzcUN0TW9ub0FjYz1mdW5jdGlvbihwYXJtc2VzdGltKXsKICBzc3FyZXMgPSB7fQogIHRpPWMoc2VxKDAsdG1heCwwLjAxKSxjKDAsMSwyLDMsNiw3LDgpKQogIHRpPXNvcnQodW5pcXVlKHRpKSkKICBwYXJtc29kZSA9IGMoMTBecGFybXNlc3RpbSwgcGFybXNDdE1NKQogIAogIAogICMgc29sdmUgT0RFIGZvciBhIGdpdmVuIHNldCBvZiBwYXJhbWV0ZXJzCiAgb3V0PW9kZSh5PWMoQmFjdD1DdDAwNWluaSxOdT1jb21waW5pLENvbXA9MC4wNSksdGltZXM9dGksZnVuYz1GdW5jTW9ub0FjYyxwYXJtcz1wYXJtc29kZSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKICBvdXRkZj1kYXRhLmZyYW1lKG91dCkKICBvdXRkZj1vdXRkZltvdXRkZiR0aW1lICVpbiUgdGltZSxdCiAgb3V0ZGZbb3V0ZGY8ZXh0X3Rocl09ZXh0X3RocgogIGZvciAoaSBpbiAxOm5yZXApIHsKICAgIHNzcXJlcyA9IGMoc3NxcmVzLCBsb2cob3V0ZGYkQmFjdCkgLSBsb2coQ3QwMDVbLGldKSkKICB9CiAgCiAgb3V0PW9kZSh5PWMoQmFjdD1DdDAxaW5pLE51PWNvbXBpbmksQ29tcD0wLjEpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMgPSBjKHNzcXJlcywgbG9nKG91dGRmJEJhY3QpIC0gbG9nKEN0MDFbLGldKSkKICB9CiAgCiAgb3V0PW9kZSh5PWMoQmFjdD1DdDA1aW5pLE51PWNvbXBpbmksQ29tcD0wLjUpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMgPSBjKHNzcXJlcywgbG9nKG91dGRmJEJhY3QpIC0gbG9nKEN0MDVbLGldKSkKICB9CiAgCiAgb3V0PW9kZSh5PWMoQmFjdD1DdDA3NWluaSxOdT1jb21waW5pLENvbXA9MC43NSksdGltZXM9dGksZnVuYz1GdW5jTW9ub0FjYyxwYXJtcz1wYXJtc29kZSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKICBvdXRkZj1kYXRhLmZyYW1lKG91dCkKICBvdXRkZj1vdXRkZltvdXRkZiR0aW1lICVpbiUgdGltZSxdCiAgb3V0ZGZbb3V0ZGY8ZXh0X3Rocl09ZXh0X3RocgogIGZvciAoaSBpbiAxOm5yZXApIHsKICAgIHNzcXJlcyA9IGMoc3NxcmVzLCBsb2cob3V0ZGYkQmFjdCkgLSBsb2coQ3QwNzVbLGldKSkgCiAgfQogICMgcmV0dXJuIHByZWRpY3RlZCB2cyBleHBlcmltZW50YWwgcmVzaWR1YWwKICByZXR1cm4obmEub21pdChzc3FyZXMpKQp9CmBgYAoKYGBge3IsZWNobz1GQUxTRX0Kc3NxQ3RNb25vQWNjMDEwNzU9ZnVuY3Rpb24ocGFyKXsKICBzc3FyZXMgPSB7fQogIHRpPWMoc2VxKDAsdG1heCwwLjAxKSxjKDAsMSwyLDMsNiw3LDgpKQogIHRpPXNvcnQodW5pcXVlKHRpKSkKICBwYXJtc29kZSA9IHBhcgogIAogIG91dD1vZGUoeT1jKEJhY3Q9Q3QwMWluaSxOdT1jb21waW5pLENvbXA9MC4xKSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RlLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogIG91dGRmPWRhdGEuZnJhbWUob3V0KQogIG91dGRmPW91dGRmW291dGRmJHRpbWUgJWluJSB0aW1lLF0KICBvdXRkZltvdXRkZjxleHRfdGhyXT1leHRfdGhyCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzID0gYyhzc3FyZXMsIGxvZyhvdXRkZiRCYWN0KSAtIGxvZyhDdDAxWyxpXSkpCiAgfQogIAogIG91dD1vZGUoeT1jKEJhY3Q9Q3QwNzVpbmksTnU9Y29tcGluaSxDb21wPTAuNzUpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMgPSBjKHNzcXJlcywgbG9nKG91dGRmJEJhY3QpIC0gbG9nKEN0MDc1WyxpXSkpIAogIH0KICAjIHJldHVybiBwcmVkaWN0ZWQgdnMgZXhwZXJpbWVudGFsIHJlc2lkdWFsCiAgcmV0dXJuKG5hLm9taXQoc3NxcmVzKSkKfQpgYGAKCmBgYHtyLGVjaG89RkFMU0V9CnBhcm1zZXN0aW1DdCA9IGxvZzEwKGMocmMgPSAyMCwgS2MgPSAxLCBZYyA9IDJlOSwgYmV0YSA9IDAuMSwgZ2FtbWE9MC4xKSkKaWYgKGJvb2xmaXQpIHtmaXRDdCA9IG1vZEZpdChmID0gc3NxQ3RNb25vQWNjLHA9cGFybXNlc3RpbUN0LGphYyA9IE5VTEwpfQpgYGAKCmBgYHtyLGVjaG89RkFMU0UsZmlnLndpZHRoPTUsZmlnLmhlaWdodD00fQpwYXJtc29kQ3QgPSBjKDEwXmNvZWYoZml0Q3QpLCBwYXJtc0N0TU0pCgpvdXQwMDU9b2RlKHk9YyhCYWN0ID0gQ3QwMDVpbmksTnU9Y29tcGluaSxDb21wID0gMC4wNSksdGltZXM9dGksZnVuYz1GdW5jTW9ub0FjYyxwYXJtcz1wYXJtc29kQ3QsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCm91dDAwNT1hcy5kYXRhLmZyYW1lKG91dDAwNSkKCm91dDAxPW9kZSh5PWMoQmFjdCA9IEN0MDFpbmksTnU9Y29tcGluaSxDb21wID0gMC4xKSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RDdCxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKb3V0MDE9YXMuZGF0YS5mcmFtZShvdXQwMSkKCm91dDA1PW9kZSh5PWMoQmFjdCA9IEN0MDVpbmksTnU9Y29tcGluaSxDb21wID0gMC41KSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RDdCxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKb3V0MDU9YXMuZGF0YS5mcmFtZShvdXQwNSkKCm91dDA3NT1vZGUoeT1jKEJhY3QgPSBDdDA3NWluaSxOdT1jb21waW5pLENvbXAgPSAwLjc1KSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RDdCxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKb3V0MDc1PWFzLmRhdGEuZnJhbWUob3V0MDc1KQoKcGxvdChDdDAwNVssMV1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMV0sdHJhbnNwYXIpLCB5bGFiPSJDRlUvbUwiLGxvZz0ieSIseWxpbT1jKDFlNSwxZTEwKSxtYWluPSJGaXR0aW5nIEN0IGluIG1vbm9jdWx0dXJlIChtb2RlbCAxKSIsbHdkPTMpCnBvaW50cyhDdDAwNVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzFdLHRyYW5zcGFyKSkKbGluZXMoQ3QwMDVbLDJdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzFdLHRyYW5zcGFyKSxsd2Q9MykKcG9pbnRzKEN0MDA1WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMV0sdHJhbnNwYXIpKQpsaW5lcyhDdDAwNVssM11+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMV0sdHJhbnNwYXIpLGx3ZD0zKQpwb2ludHMoQ3QwMDVbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFsxXSx0cmFuc3BhcikpCgpwb2ludHMoQ3QwMVssMV1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpLGx3ZD0zKQpwb2ludHMoQ3QwMVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKbGluZXMoQ3QwMVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpLGx3ZD0zKQpwb2ludHMoQ3QwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKbGluZXMoQ3QwMVssM11+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpLGx3ZD0zKQpwb2ludHMoQ3QwMVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKCmxpbmVzKEN0MDVbLDFdfnRpbWUsbHdkPTMsY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSkKcG9pbnRzKEN0MDVbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFszXSx0cmFuc3BhcikpCmxpbmVzKEN0MDVbLDJdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSxsd2Q9MykKcG9pbnRzKEN0MDVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFszXSx0cmFuc3BhcikpCmxpbmVzKEN0MDVbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSxsd2Q9MykKcG9pbnRzKEN0MDVbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFszXSx0cmFuc3BhcikpCgpsaW5lcyhDdDA3NVssMV1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpLGx3ZD0zKQpwb2ludHMoQ3QwNzVbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhcikpCmxpbmVzKEN0MDc1WywyXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhciksbHdkPTMpCnBvaW50cyhDdDA3NVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSkKbGluZXMoQ3QwNzVbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSxsd2Q9MykKcG9pbnRzKEN0MDc1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpKQpsZWdlbmQoImJvdHRvbXJpZ2h0IixsZWdlbmQ9YygiMC4wNSUiLCIwLjElIiwiMC41JSIsIjAuNzUlIiksY29sPWNvbEN0LHBjaD0xOSxidHk9Im4iLGx3ZD0zKQoKcG9pbnRzKG91dDAwNVssMl1+b3V0MDA1WywxXSx0eXBlPSJsIixsd2Q9Nyxjb2w9YWxwaGEoY29sQ3RbMV0sMC42KSxsdHk9ImRvdHRlZCIpCnBvaW50cyhvdXQwMVssMl1+b3V0MDFbLDFdLHR5cGU9ImwiLGx3ZD03LGNvbD1hbHBoYShjb2xDdFsyXSwwLjYpLGx0eT0iZG90dGVkIikKcG9pbnRzKG91dDA1WywyXX5vdXQwNVssMV0sdHlwZT0ibCIsbHdkPTcsY29sPWFscGhhKGNvbEN0WzRdLDAuNiksbHR5PSJkb3R0ZWQiKQpwb2ludHMob3V0MDc1WywyXX5vdXQwNzVbLDFdLHR5cGU9ImwiLGx3ZD03LGNvbD1hbHBoYShjb2xDdFszXSwwLjYpLGx0eT0iZG90dGVkIikKYGBgCgpgYGB7cixlY2hvPUZBTFNFfQojZ29vZG5lc3Mgb2YgZml0Cgojc3VtKHNzcUN0TW9ub0FjYyhjb2VmKGZpdEN0KSleMikKYGBgCgojIyMgMS40IENvbXBhcmluZyBjby1jdWx0dXJlIHByZWRpY3Rpb24gd2l0aCBjby1jdWx0dXJlIGRhdGEKCldoYXQgYWJvdXQgdGhlIGNvLWN1bHR1cmUgcHJlZGljdGlvbj8KCmBgYHtyLGVjaG89RkFMU0V9CnBhcm1zb2RDdCA9IGFzLmRhdGEuZnJhbWUodChwYXJtc29kQ3QpKQpwYXJtc29kQXQgPSBhcy5kYXRhLmZyYW1lKHQocGFybXNvZEF0KSkKYGBgCgpgYGB7cixlY2hvPUZBTFNFfQpwYXJtdG90X21vZGVsMSA9IGxpc3QocmMxID0gcGFybXNvZEN0JHJjLAogICAgICAgICAgICAgICBLYzEgPSBwYXJtc29kQ3QkS2MsCiAgICAgICAgICAgICAgIGJldGExID0gcGFybXNvZEN0JGJldGEsCiAgICAgICAgICAgICAgIFljMSA9IHBhcm1zb2RDdCRZYywKICAgICAgICAgICAgICAgZ2FtbWExID0gcGFybXNvZEN0JGdhbW1hLAogICAgICAgICAgICAgICBybjEgPSBwYXJtc29kQ3Qkcm4sCiAgICAgICAgICAgICAgIEtuMSA9IHBhcm1zb2RDdCRLbiwKICAgICAgICAgICAgICAgWW4xID0gcGFybXNvZEN0JFluLAogICAgICAgICAgICAgICByYzIgPSBwYXJtc29kQXQkcmMsCiAgICAgICAgICAgICAgIEtjMiA9IHBhcm1zb2RBdCRLYywKICAgICAgICAgICAgICAgYmV0YTIgPSBwYXJtc29kQXQkYmV0YSwKICAgICAgICAgICAgICAgWWMyID0gcGFybXNvZEF0JFljLAogICAgICAgICAgICAgICBnYW1tYTIgPSBwYXJtc29kQXQkZ2FtbWEsCiAgICAgICAgICAgICAgIHJuMiA9IHBhcm1zb2RBdCRybiwKICAgICAgICAgICAgICAgS24yID0gcGFybXNvZEF0JEtuLAogICAgICAgICAgICAgICBZbjIgPSBwYXJtc29kQXQkWW4pCgojIyMgQ29jdWx0dXJlIE9ERSBzeXN0ZW0gaW4gbW9kZWwgMQpGdW5jQ29DdWx0PWZ1bmN0aW9uKHQsc3RhdGUscGFybXMpewogIHdpdGgoYXMubGlzdChjKHN0YXRlLHBhcm1zKSksIHsKICAgIGRCYWN0MSA9IHJuMSpOdS8oTnUgKyBLbjEpKkJhY3QxICsgcmMxKkNvbXAvKENvbXAgKyBLYzEpKkJhY3QxIC0gRnVuY1RveCh0LGJldGExLGdhbW1hMSkqQ29tcCpCYWN0MQogICAgZEJhY3QyID0gcm4yKk51LyhOdSArIEtuMikqQmFjdDIgKyByYzIqQ29tcC8oQ29tcCArIEtjMikqQmFjdDIgLSBGdW5jVG94KHQsYmV0YTIsZ2FtbWEyKSpDb21wKkJhY3QyCiAgICBkTnUgPSAtIDEvWW4xKnJuMSpOdS8oTnUgKyBLbjEpKkJhY3QxIC0gMS9ZbjIqcm4yKk51LyhOdSArIEtuMikqQmFjdDIgIAogICAgZENvbXAgPSAtMS9ZYzEqcmMxKkNvbXAvKENvbXAgKyBLYzEpKkJhY3QxIC0xL1ljMipyYzIqQ29tcC8oQ29tcCArIEtjMikqQmFjdDIgICAKICAgIHJldHVybihsaXN0KGMoZEJhY3QxLGRCYWN0MixkTnUsZENvbXApKSkKICB9KQp9CmBgYAoKYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTYsZmlnLndpZHRoPTEyfQp0aT1jKHNlcSgwLHRtYXgsMC4wMSksYygwLDEsMiwzLDYsNyw4KSkKdGk9c29ydCh1bmlxdWUodGkpKQoKcGFyKG1mcm93PWMoMSwyKSkKcGxvdChDdEF0MDFbLDFdfnRpbWUsY29sPWFscGhhKGNvbEN0WzJdLDAuNSksbHdkPTIsdHlwZT0ibCIseWxpbT1jKDFlNCwxZTEwKSxsb2c9InkiLGx0eT0ic29saWQiLCB5bGFiPSJDRlUvbUwiLG1haW49IkNvY3VsdHVyZXMgYXQgMC4xJSIsYnR5PSJuIikKcG9pbnRzKEN0QXQwMVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEN0QXQwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEN0QXQwMVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKbGluZXMoQ3RBdDAxWywyXX50aW1lLGNvbD1hbHBoYShjb2xDdFsyXSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhDdEF0MDFbLDNdfnRpbWUsY29sPWFscGhhKGNvbEN0WzJdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmxpbmVzKEF0Q3QwMVssMV1+dGltZSxjb2w9YWxwaGEoY29sQXRbMl0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKcG9pbnRzKEF0Q3QwMVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEF0Q3QwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEF0Q3QwMVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSkKbGluZXMoQXRDdDAxWywyXX50aW1lLGNvbD1hbHBoYShjb2xBdFsyXSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhBdEN0MDFbLDNdfnRpbWUsY29sPWFscGhhKGNvbEF0WzJdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmNvY3VsdDEgPSBvZGUoeT1jKEJhY3QxID0gQ3RBdDAxaW5pLEJhY3QyID0gQXRDdDAxaW5pLE51PWNvbXBpbmksQ29tcCA9IDAuMSksdGltZXM9dGksZnVuYz1GdW5jQ29DdWx0LHBhcm1zPXBhcm10b3RfbW9kZWwxLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQpsaW5lcyhCYWN0MX50aW1lLGNvY3VsdDEsY29sPWNvbEN0WzJdLGx0eT0iZG90dGVkIixsd2Q9MykKbGluZXMoQmFjdDJ+dGltZSxjb2N1bHQxLGNvbD1jb2xBdFsyXSxsdHk9ImRvdHRlZCIsbHdkPTMpCmxlZ2VuZCgiYm90dG9tcmlnaHQiLGxlZ2VuZD1jKCJDdChBdCkgKGRhdGEpIiwiQXQoQ3QpIChkYXRhKSIsIkN0KEF0KSAocHJlZGljdGlvbikiLCJBdChDdCkgKHByZWRpY3Rpb24pIiksY29sPWMoYWxwaGEoY29sQ3RbMl0sMC41KSxhbHBoYShjb2xBdFsyXSwwLjUpLGNvbEN0WzJdLGNvbEF0WzJdKSxsdHk9Yygic29saWQiLCJzb2xpZCIsImRvdHRlZCIsImRvdHRlZCIpLGx3ZD1jKDIsMiwyLDIpLHBjaD1jKDE5LDE5LE5BLE5BKSxidHk9Im4iLGNleD0wLjgpCgoKcGxvdChDdEF0MDc1WywxXX50aW1lLGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yLHR5cGU9ImwiLGxvZz0ieSIseWxpbT1jKDFlNCwxZTEwKSxsdHk9InNvbGlkIix5bGFiPSJDRlUvbUwiLG1haW49IkNvY3VsdHVyZXMgYXQgMC43NSUiLGJ0eT0ibiIpCnBvaW50cyhDdEF0MDc1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpKQpwb2ludHMoQ3RBdDA3NVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSkKcG9pbnRzKEN0QXQwNzVbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhcikpCmxpbmVzKEN0QXQwNzVbLDJdfnRpbWUsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmxpbmVzKEN0QXQwNzVbLDNdfnRpbWUsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCnBvaW50cyhBdEN0MDc1WywxXX50aW1lLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yLHR5cGU9ImwiLGx0eT0ic29saWQiKQpwb2ludHMoQXRDdDA3NVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSkKcG9pbnRzKEF0Q3QwNzVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhcikpCnBvaW50cyhBdEN0MDc1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpKQpsaW5lcyhBdEN0MDc1WywyXX50aW1lLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhBdEN0MDc1WywzXX50aW1lLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpjb2N1bHQyID0gb2RlKHk9YyhCYWN0MSA9IEN0QXQwNzVpbmksQmFjdDIgPSBBdEN0MDc1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuNzUpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvQ3VsdCxwYXJtcz1wYXJtdG90X21vZGVsMSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcG9pbnRzKEJhY3QxfnRpbWUsY29jdWx0Mix0eXBlPSJsIixjb2w9Y29sQ3RbNF0sbHdkPTUsbHR5PSJkb3R0ZWQiKQpwb2ludHMoQmFjdDJ+dGltZSxjb2N1bHQyLHR5cGU9ImwiLGNvbD1jb2xBdFs0XSxsd2Q9NSxsdHk9ImRvdHRlZCIpCmxlZ2VuZCgiYm90dG9tcmlnaHQiLGxlZ2VuZD1jKCJDdChBdCkgKGRhdGEpIiwiQXQoQ3QpIChkYXRhKSIsIkN0KEF0KSAocHJlZGljdGlvbikiLCJBdChDdCkgKHByZWRpY3Rpb24pIiksY29sPWMoYWxwaGEoY29sQ3RbNF0sMC41KSxhbHBoYShjb2xBdFs0XSwwLjUpLGNvbEN0WzRdLGNvbEF0WzRdKSxsdHk9Yygic29saWQiLCJzb2xpZCIsImRvdHRlZCIsImRvdHRlZCIpLGx3ZD1jKDIsMiwzLDMpLGJ0eT0ibiIsY2V4PTAuOCxwY2g9YygxOSwxOSxOQSxOQSkpCmBgYAoKRXJyb3Igb2YgbW9kZWwgMToKCmBgYHtyLGVjaG89RkFMU0V9CiMjIENvbXB1dGUgdGhlIGVycm9yIG9mIG1vZGVsIDEgKHN1bSBvZiBzcXVhcmVzKQoKI2Vycm9yIGF0IDAuMSUKY29jdWx0MWRmPWRhdGEuZnJhbWUoY29jdWx0MSkKY29jdWx0MWRmPWNvY3VsdDFkZltjb2N1bHQxZGYkdGltZSAlaW4lIHRpbWUsXQpjb2N1bHQxZGZbY29jdWx0MWRmPGV4dF90aHJdPWV4dF90aHIKc3NxY29jdWx0MSA9IHt9CmZvciAoaSBpbiAxOm5yZXApIHsKICBzc3Fjb2N1bHQxID0gYyhzc3Fjb2N1bHQxLCBsb2coY29jdWx0MWRmJEJhY3QxKSAtIGxvZyhDdEF0MDFbLGldKSwgbG9nKGNvY3VsdDFkZiRCYWN0MikgLSBsb2coQXRDdDAxWyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwp9CnN1bWVycm9yMDFfbW9kZWwxID0gc3VtKHNzcWNvY3VsdDFeMikKcHJpbnQocGFzdGUoIlN1bSBvZiBlcnJvcnMgYXQgMC4xJTogIiwgc3VtZXJyb3IwMV9tb2RlbDEpKQoKI2Vycm9yIGF0IDAuNzUlCmNvY3VsdDJkZj1kYXRhLmZyYW1lKGNvY3VsdDIpCmNvY3VsdDJkZj1jb2N1bHQyZGZbY29jdWx0MmRmJHRpbWUgJWluJSB0aW1lLF0KY29jdWx0MmRmW2NvY3VsdDJkZjxleHRfdGhyXT1leHRfdGhyCnNzcWNvY3VsdDIgPSB7fQpmb3IgKGkgaW4gMTpucmVwKSB7CiAgc3NxY29jdWx0MiA9IGMoc3NxY29jdWx0MiwgbG9nKGNvY3VsdDJkZiRCYWN0MSkgLSBsb2coQ3RBdDA3NVssaV0pLCBsb2coY29jdWx0MmRmJEJhY3QyKSAtIGxvZyhBdEN0MDc1WyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwp9CnN1bWVycm9yMDc1X21vZGVsMSA9IHN1bShzc3Fjb2N1bHQyXjIpCnByaW50KHBhc3RlKCJTdW0gb2YgZXJyb3JzIGF0IDAuNzUlOiAiLCBzdW1lcnJvcjA3NV9tb2RlbDEpKQpzdW1tb2RlbDEgPSBzdW1lcnJvcjAxX21vZGVsMSArIHN1bWVycm9yMDc1X21vZGVsMQoKcHJpbnQocGFzdGUoIlN1bSBvZiBlcnJvcnM6ICIsIHN1bW1vZGVsMSkpCgoKYGBgCgojIyMgMS41IFBhcmFtZXRlciBzZXQgb2YgdGhlIG1haW4gdGV4dAoKYGBge3IsZWNobz1GQUxTRX0KcGFybXNvZEN0XzEgPSBjKHJjID0gMi4zNzg0MjMgLCBLYyA9ICAwLjAwMDU5NDMwMDYsIGJldGEgPSAgMC4yOTk0MjA2LCBZYyA9ICAxMzgyODg3MDgxLCBnYW1tYSA9IDMuMDE0MzA2ZS0wNiwgcm4gPSAzNDYuNTMzNSwgS24gPSAwLjEwMDUxOSwgWW4gPSAgMTI3NzkwMTA0OSkgICAKCnBhcm1zb2RBdF8xID0gYyhyYyA9IDEuOTQxMzU4LCBLYyA9IDAuMDAxMDAwMDEyLCBiZXRhID0gMy4zNTkwMzUsIFljID0gMjM4MDY3OTQ3MiwgZ2FtbWEgPSAwLjU2Mjc2MTMsIHJuID0gODkxLjQzMywgS24gPSAxLjAxMzIwMywgWW4gPSAzMTM5MTg4MTYpICAgCgoKcGFybXNvZEN0XzEgPSBhcy5kYXRhLmZyYW1lKHQocGFybXNvZEN0XzEpKQpwYXJtc29kQXRfMSA9IGFzLmRhdGEuZnJhbWUodChwYXJtc29kQXRfMSkpCgojIyBlcnJvciBvZiBtb25vY3VsdHVyZSBmaXQgCiNwcmludChzdW0oKHNzcUF0TW9ub0FjYzAxMDc1KHBhcm1zb2RBdF8xKSleMikgKyBzdW0oKHNzcUN0TW9ub0FjYzAxMDc1KHBhcm1zb2RDdF8xKSleMikpCmBgYAoKYGBge3IsZmlnLndpZHRoPTE1LGZpZy5oZWlnaHQ9MTAsZWNobz1GQUxTRX0KcGFybXRvdF8xID0gbGlzdChyYzEgPSBwYXJtc29kQ3RfMSRyYywKICAgICAgICAgICAgICAgS2MxID0gcGFybXNvZEN0XzEkS2MsCiAgICAgICAgICAgICAgIGJldGExID0gcGFybXNvZEN0XzEkYmV0YSwKICAgICAgICAgICAgICAgWWMxID0gcGFybXNvZEN0XzEkWWMsCiAgICAgICAgICAgICAgIGdhbW1hMSA9IHBhcm1zb2RDdF8xJGdhbW1hLAogICAgICAgICAgICAgICBybjEgPSBwYXJtc29kQ3RfMSRybiwKICAgICAgICAgICAgICAgS24xID0gcGFybXNvZEN0XzEkS24sCiAgICAgICAgICAgICAgIFluMSA9IHBhcm1zb2RDdF8xJFluLAogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgcmMyID0gcGFybXNvZEF0XzEkcmMsCiAgICAgICAgICAgICAgIEtjMiA9IHBhcm1zb2RBdF8xJEtjLAogICAgICAgICAgICAgICBiZXRhMiA9IHBhcm1zb2RBdF8xJGJldGEsCiAgICAgICAgICAgICAgIFljMiA9IHBhcm1zb2RBdF8xJFljLAogICAgICAgICAgICAgICBnYW1tYTIgPSBwYXJtc29kQXRfMSRnYW1tYSwKICAgICAgICAgICAgICAgcm4yID0gcGFybXNvZEF0XzEkcm4sCiAgICAgICAgICAgICAgIEtuMiA9IHBhcm1zb2RBdF8xJEtuLAogICAgICAgICAgICAgICBZbjIgPSBwYXJtc29kQXRfMSRZbikKCgpwYXIobWZyb3c9YygyLDIpKQpwbG90KEF0MDA1WywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsxXSx0cmFuc3BhciksIHlsYWI9IkNGVS9tTCIsbG9nPSJ5Iix5bGltPWMoMWUxLDFlOSksbWFpbj0iRml0dGluZyBBdCBncm93dGggaW4gbW9ub2N1bHR1cmUiLGx3ZD0yKQpwb2ludHMoQXQwMDVbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsxXSx0cmFuc3BhcikpCmxpbmVzKEF0MDA1WywyXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsxXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDAwNVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzFdLHRyYW5zcGFyKSkKbGluZXMoQXQwMDVbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzFdLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEF0MDA1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMV0sdHJhbnNwYXIpKQoKcG9pbnRzKEF0MDFbLDFdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEF0MDFbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCmxpbmVzKEF0MDFbLDJdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEF0MDFbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCmxpbmVzKEF0MDFbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEF0MDFbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCgpsaW5lcyhBdDA1WywxXX50aW1lLGx3ZD0yLGNvbD1hbHBoYShjb2xBdFszXSx0cmFuc3BhcikpCnBvaW50cyhBdDA1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpKQpsaW5lcyhBdDA1WywyXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFszXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDA1WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpKQpsaW5lcyhBdDA1WywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFszXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDA1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpKQoKbGluZXMoQXQwNzVbLDFdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEF0MDc1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpKQpsaW5lcyhBdDA3NVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQXQwNzVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhcikpCmxpbmVzKEF0MDc1WywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhBdDA3NVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSkKbGVnZW5kKCJib3R0b21sZWZ0IiwKICAgICAgIGxlZ2VuZD1jKCIwLjA1JSIsIjAuMSUiLCIwLjUlIiwiMC43NSUiLCJkYXRhIiwiZml0IiksCiAgICAgICBjb2w9Yyhjb2xBdCwiYmxhY2siLGFscGhhKCJibGFjayIsMC45KSksCiAgICAgICBwY2g9YygxOSwxOSwxOSwxOSwxOSxOQSksYnR5PSJuIixsd2Q9YygyLDIsMiwyLDIsNSksbHR5PWMoMSwxLDEsMSwxLDIpKQphZGQubGFiZWwgPC0gZnVuY3Rpb24obGFiZWwsIC4uLikgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kPSIgIiwgdGl0bGU9bGFiZWwsCmJ0eT0nbicsIC4uLikKCgojcHJpbnQoc3VtKHNzcUF0TW9ub0FjYyhsb2cxMChwYXJtc29kQXRfMSkpXjIpKQoKCm91dD1vZGUoeT1jKEJhY3QgPSBBdDAwNWluaSxOdT1jb21waW5pLENvbXAgPSAwLjA1KSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RBdF8xLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQpwb2ludHMob3V0WywyXX5vdXRbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1hbHBoYShjb2xBdFsxXSwwLjkpLGx0eT0iZGFzaGVkIikKb3V0PW9kZSh5PWMoQmFjdCA9IEF0MDFpbmksTnU9Y29tcGluaSxDb21wID0gMC4xKSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RBdF8xLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQpwb2ludHMob3V0WywyXX5vdXRbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1hbHBoYShjb2xBdFsyXSwwLjkpLGx0eT0iZGFzaGVkIikKb3V0PW9kZSh5PWMoQmFjdCA9IEF0MDc1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuNzUpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZEF0XzEsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCnBvaW50cyhvdXRbLDJdfm91dFssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWFscGhhKGNvbEF0WzRdLDAuOSksbHR5PSJkYXNoZWQiKQpvdXQ9b2RlKHk9YyhCYWN0ID0gQXQwNWluaSxOdT1jb21waW5pLENvbXAgPSAwLjUpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZEF0XzEsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCnBvaW50cyhvdXRbLDJdfm91dFssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWFscGhhKGNvbEF0WzNdLDAuOSksbHR5PSJkYXNoZWQiKQoKCgpvdXQwMDU9b2RlKHk9YyhCYWN0ID0gQ3QwMDVpbmksTnU9Y29tcGluaSxDb21wID0gMC4wNSksdGltZXM9dGksZnVuYz1GdW5jTW9ub0FjYyxwYXJtcz1wYXJtc29kQ3RfMSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKb3V0MDA1PWFzLmRhdGEuZnJhbWUob3V0MDA1KQoKb3V0MDE9b2RlKHk9YyhCYWN0ID0gQ3QwMWluaSxOdT1jb21waW5pLENvbXAgPSAwLjEpLHRpbWVzPXRpLGZ1bmM9RnVuY01vbm9BY2MscGFybXM9cGFybXNvZEN0XzEsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCm91dDAxPWFzLmRhdGEuZnJhbWUob3V0MDEpCgpvdXQwNT1vZGUoeT1jKEJhY3QgPSBDdDA1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuNSksdGltZXM9dGksZnVuYz1GdW5jTW9ub0FjYyxwYXJtcz1wYXJtc29kQ3RfMSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKb3V0MDU9YXMuZGF0YS5mcmFtZShvdXQwNSkKCm91dDA3NT1vZGUoeT1jKEJhY3QgPSBDdDA3NWluaSxOdT1jb21waW5pLENvbXAgPSAwLjc1KSx0aW1lcz10aSxmdW5jPUZ1bmNNb25vQWNjLHBhcm1zPXBhcm1zb2RDdF8xLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQpvdXQwNzU9YXMuZGF0YS5mcmFtZShvdXQwNzUpCgpwbG90KEN0MDA1WywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFsxXSx0cmFuc3BhciksIHlsYWI9IkNGVS9tTCIsbG9nPSJ5Iix5bGltPWMoMWU1LDFlMTApLG1haW49IkZpdHRpbmcgQ3QgZ3Jvd3RoIGluIG1vbm9jdWx0dXJlIixsd2Q9MykKcG9pbnRzKEN0MDA1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMV0sdHJhbnNwYXIpKQpsaW5lcyhDdDAwNVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMV0sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQ3QwMDVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFsxXSx0cmFuc3BhcikpCmxpbmVzKEN0MDA1WywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFsxXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhDdDAwNVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzFdLHRyYW5zcGFyKSkKCnBvaW50cyhDdDAxWywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhDdDAxWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQpsaW5lcyhDdDAxWywyXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhDdDAxWywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQpsaW5lcyhDdDAxWywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhDdDAxWywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQoKbGluZXMoQ3QwNVssMV1+dGltZSxsd2Q9Myxjb2w9YWxwaGEoY29sQ3RbM10sdHJhbnNwYXIpKQpwb2ludHMoQ3QwNVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSkKbGluZXMoQ3QwNVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbM10sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQ3QwNVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSkKbGluZXMoQ3QwNVssM11+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbM10sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQ3QwNVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSkKCmxpbmVzKEN0MDc1WywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhciksbHdkPTIpCnBvaW50cyhDdDA3NVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSkKbGluZXMoQ3QwNzVbLDJdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSxsd2Q9MikKcG9pbnRzKEN0MDc1WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpKQpsaW5lcyhDdDA3NVssM11+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpLGx3ZD0yKQpwb2ludHMoQ3QwNzVbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhcikpCmxlZ2VuZCgiYm90dG9tcmlnaHQiLAogICAgICAgbGVnZW5kPWMoIjAuMDUlIiwiMC4xJSIsIjAuNSUiLCIwLjc1JSIsImRhdGEiLCJmaXQiKSwKICAgICAgIGNvbD1jKGNvbEN0LCJibGFjayIsYWxwaGEoImJsYWNrIiwwLjkpKSwKICAgICAgIHBjaD1jKDE5LDE5LDE5LDE5LDE5LE5BKSxidHk9Im4iLGx3ZD1jKDIsMiwyLDIsMiw1KSxsdHk9YygxLDEsMSwxLDEsMikpCgpwb2ludHMob3V0MDA1WywyXX5vdXQwMDVbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1hbHBoYShjb2xDdFsxXSwwLjYpLGx0eT0iZGFzaGVkIikKcG9pbnRzKG91dDAxWywyXX5vdXQwMVssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWFscGhhKGNvbEN0WzJdLDAuNiksbHR5PSJkYXNoZWQiKQpwb2ludHMob3V0MDVbLDJdfm91dDA1WywxXSx0eXBlPSJsIixsd2Q9NSxjb2w9YWxwaGEoY29sQ3RbNF0sMC42KSxsdHk9ImRhc2hlZCIpCnBvaW50cyhvdXQwNzVbLDJdfm91dDA3NVssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWFscGhhKGNvbEN0WzNdLDAuNiksbHR5PSJkYXNoZWQiKQoKI2dvb2RuZXNzIG9mIGZpdAojcHJpbnQoc3VtKHNzcUN0TW9ub0FjYyhsb2cxMChwYXJtc29kQ3RfMSkpXjIpKQoKdGk9YyhzZXEoMCx0bWF4LDAuMDEpLGMoMCwxLDIsMyw2LDcsOCkpCnRpPXNvcnQodW5pcXVlKHRpKSkKCmNvY3VsdDEgPSBvZGUoeT1jKEJhY3QxID0gQ3RBdDAxaW5pLEJhY3QyID0gQXRDdDAxaW5pLE51PWNvbXBpbmksQ29tcCA9IDAuMSksdGltZXM9dGksZnVuYz1GdW5jQ29DdWx0LHBhcm1zPSBwYXJtdG90XzEsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCgpjb2N1bHQyID0gb2RlKHk9YyhCYWN0MSA9IEN0QXQwNzVpbmksQmFjdDIgPSBBdEN0MDc1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuNzUpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvQ3VsdCxwYXJtcz1wYXJtdG90XzEsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCgoKcGxvdChDdEF0MDFbLDFdfnRpbWUsY29sPWFscGhhKGNvbEN0WzJdLDAuNSksbHdkPTIsdHlwZT0ibCIseWxpbT1jKDFlNCwxZTEwKSxsb2c9InkiLGx0eT0ic29saWQiLCB5bGFiPSJDRlUvbUwiLG1haW49IkNvY3VsdHVyZXMgYXQgMC4xJSIsYnR5PSJuIikKcG9pbnRzKEN0QXQwMVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEN0QXQwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEN0QXQwMVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKbGluZXMoQ3RBdDAxWywyXX50aW1lLGNvbD1hbHBoYShjb2xDdFsyXSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhDdEF0MDFbLDNdfnRpbWUsY29sPWFscGhhKGNvbEN0WzJdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmxpbmVzKEF0Q3QwMVssMV1+dGltZSxjb2w9YWxwaGEoY29sQXRbMl0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKcG9pbnRzKEF0Q3QwMVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEF0Q3QwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEF0Q3QwMVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSkKbGluZXMoQXRDdDAxWywyXX50aW1lLGNvbD1hbHBoYShjb2xBdFsyXSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhBdEN0MDFbLDNdfnRpbWUsY29sPWFscGhhKGNvbEF0WzJdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCgpsaW5lcyhCYWN0MX50aW1lLGNvY3VsdDEsY29sPWNvbEN0WzJdLGx0eT0iZG90dGVkIixsd2Q9MykKbGluZXMoQmFjdDJ+dGltZSxjb2N1bHQxLGNvbD1jb2xBdFsyXSxsdHk9ImRvdHRlZCIsbHdkPTMpCmxlZ2VuZCgiYm90dG9tcmlnaHQiLGxlZ2VuZD1jKCJDdChBdCkgKGRhdGEpIiwiQXQoQ3QpIChkYXRhKSIsIkN0KEF0KSAocHJlZGljdGlvbikiLCJBdChDdCkgKHByZWRpY3Rpb24pIiksY29sPWMoYWxwaGEoY29sQ3RbMl0sMC41KSxhbHBoYShjb2xBdFsyXSwwLjUpLGNvbEN0WzJdLGNvbEF0WzJdKSxsdHk9Yygic29saWQiLCJzb2xpZCIsImRvdHRlZCIsImRvdHRlZCIpLGx3ZD1jKDIsMiwyLDIpLGJ0eT0ibiIsY2V4PTAuOCkKCgpwbG90KEN0QXQwNzVbLDFdfnRpbWUsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIsdHlwZT0ibCIsbG9nPSJ5Iix5bGltPWMoMWU0LDFlMTApLGx0eT0ic29saWQiLHlsYWI9IkNGVS9tTCIsbWFpbj0iQ29jdWx0dXJlcyBhdCAwLjc1JSIsYnR5PSJuIikKcG9pbnRzKEN0QXQwNzVbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhcikpCnBvaW50cyhDdEF0MDc1WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpKQpwb2ludHMoQ3RBdDA3NVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSkKbGluZXMoQ3RBdDA3NVssMl1+dGltZSxjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKbGluZXMoQ3RBdDA3NVssM11+dGltZSxjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKcG9pbnRzKEF0Q3QwNzVbLDFdfnRpbWUsY29sPWFscGhhKGNvbEF0WzRdLDAuNSksbHdkPTIsdHlwZT0ibCIsbHR5PSJzb2xpZCIpCnBvaW50cyhBdEN0MDc1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpKQpwb2ludHMoQXRDdDA3NVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSkKcG9pbnRzKEF0Q3QwNzVbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhcikpCmxpbmVzKEF0Q3QwNzVbLDJdfnRpbWUsY29sPWFscGhhKGNvbEF0WzRdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmxpbmVzKEF0Q3QwNzVbLDNdfnRpbWUsY29sPWFscGhhKGNvbEF0WzRdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCgpwb2ludHMoQmFjdDF+dGltZSxjb2N1bHQyLHR5cGU9ImwiLGNvbD1jb2xDdFs0XSxsd2Q9NSxsdHk9ImRvdHRlZCIpCnBvaW50cyhCYWN0Mn50aW1lLGNvY3VsdDIsdHlwZT0ibCIsY29sPWNvbEF0WzRdLGx3ZD01LGx0eT0iZG90dGVkIikKbGVnZW5kKCJib3R0b21yaWdodCIsbGVnZW5kPWMoIkN0KEF0KSAoZGF0YSkiLCJBdChDdCkgKGRhdGEpIiwiQ3QoQXQpIChwcmVkaWN0aW9uKSIsIkF0KEN0KSAocHJlZGljdGlvbikiKSxjb2w9YyhhbHBoYShjb2xDdFs0XSwwLjUpLGFscGhhKGNvbEF0WzRdLDAuNSksY29sQ3RbNF0sY29sQXRbNF0pLGx0eT1jKCJzb2xpZCIsInNvbGlkIiwiZG90dGVkIiwiZG90dGVkIiksbHdkPWMoMiwyLDMsMyksYnR5PSJuIixjZXg9MC44KQoKIyMgQ29tcHV0ZSB0aGUgZXJyb3Igb2YgbW9kZWwgMiAoc3VtIG9mIHNxdWFyZXMpCiNlcnJvciBhdCAwLjElCmNvY3VsdDFkZj1kYXRhLmZyYW1lKGNvY3VsdDEpCmNvY3VsdDFkZj1jb2N1bHQxZGZbY29jdWx0MWRmJHRpbWUgJWluJSB0aW1lLF0KY29jdWx0MWRmW2NvY3VsdDFkZjxleHRfdGhyXT1leHRfdGhyCnNzcWNvY3VsdDEgPSB7fQpmb3IgKGkgaW4gMTpucmVwKSB7CiAgc3NxY29jdWx0MSA9IGMoc3NxY29jdWx0MSwgbG9nKGNvY3VsdDFkZiRCYWN0MSkgLSBsb2coQ3RBdDAxWyxpXSksIGxvZyhjb2N1bHQxZGYkQmFjdDIpIC0gbG9nKEF0Q3QwMVssaV0pKSAjYWRkIHJlc2lkdWFsIGNvbXBhcmluZyBlc3RpbWF0ZWQgd2l0aCB0aGUgZGlmZmVyZW50IHJlcGxpY2F0ZXMKfQpwcmludChwYXN0ZSgiU3VtIG9mIGVycm9ycyBhdCAwLjElOiAiLCBzdW0oc3NxY29jdWx0MV4yKSkpCgojZXJyb3IgYXQgMC43NSUKY29jdWx0MmRmPWRhdGEuZnJhbWUoY29jdWx0MikKY29jdWx0MmRmPWNvY3VsdDJkZltjb2N1bHQyZGYkdGltZSAlaW4lIHRpbWUsXQpjb2N1bHQyZGZbY29jdWx0MmRmPGV4dF90aHJdPWV4dF90aHIKc3NxY29jdWx0MiA9IHt9CmZvciAoaSBpbiAxOm5yZXApIHsKICBzc3Fjb2N1bHQyID0gYyhzc3Fjb2N1bHQyLCBsb2coY29jdWx0MmRmJEJhY3QxKSAtIGxvZyhDdEF0MDc1WyxpXSksIGxvZyhjb2N1bHQyZGYkQmFjdDIpIC0gbG9nKEF0Q3QwNzVbLGldKSkgI2FkZCByZXNpZHVhbCBjb21wYXJpbmcgZXN0aW1hdGVkIHdpdGggdGhlIGRpZmZlcmVudCByZXBsaWNhdGVzCn0KcHJpbnQocGFzdGUoIlN1bSBvZiBlcnJvcnMgYXQgMC43NSU6ICIsIHN1bShzc3Fjb2N1bHQyXjIpKSkKcHJpbnQocGFzdGUoIlRvdGFsIHN1bSBvZiBlcnJvcnM6ICIsIHN1bShzc3Fjb2N1bHQyXjIpK3N1bShzc3Fjb2N1bHQxXjIpKSkKCgpgYGAKCiMjIDIuIE1vZGVsIDI6IGV4cGxpY2l0IHRveGljaXR5IHdpdGggUk9TIGRhdGEKCldlIGltcG9ydCB0aGUgbmV3IGRhdGEgb2YgdGhpcyBzZWNvbmQgZXhwZXJpbWVudC4KCmBgYHtyLGVjaG89RkFMU0V9CiMjIEltcG9ydGluZyBleHBlcmltZW50YWwgdGltZSBzZXJpZXMgZGF0YQpucmVwPTMKdGltZSA9IGMoMCwxLDIsMyw2LDcsOCkKCmxvYWQoIkNGVVJPU19kYXRhX21vZGVsMi5SRGF0YSIpCgoKCgpBdE1NaW5pID0gbWVhbihjKGFzLm51bWVyaWMoQXRNTVsxLF0pKSkKQXRNTXdDdGluaSA9IG1lYW4oYXMubnVtZXJpYyhBdE1Nd0N0WzEsXSkpCkN0TU1pbmkgPSBtZWFuKGMoYXMubnVtZXJpYyhDdE1NWzEsXSkpKQpDdE1Nd0F0aW5pID0gbWVhbihhcy5udW1lcmljKEN0TU13QXRbMSxdKSkKCgoKQXQwMWluaT1tZWFuKGFzLm51bWVyaWMoQXQwMVsxLF0pKQpBdDA3NWluaT1tZWFuKGFzLm51bWVyaWMoQXQwNzVbMSxdKSkKQ3QwMWluaT1tZWFuKGFzLm51bWVyaWMoQ3QwMVsxLF0pKQpDdDA3NWluaT1tZWFuKGFzLm51bWVyaWMoQ3QwNzVbMSxdKSkKCgoKQXRDdDAxaW5pPW1lYW4oYXMubnVtZXJpYyhBdEN0MDFbMSxdKSkKQXRDdDA3NWluaT1tZWFuKGFzLm51bWVyaWMoQXRDdDA3NVsxLF0pKQpDdEF0MDFpbmk9bWVhbihhcy5udW1lcmljKEN0QXQwMVsxLF0pKQpDdEF0MDc1aW5pPW1lYW4oYXMubnVtZXJpYyhDdEF0MDc1WzEsXSkpCgoKbWRhZGF0YVt3aGljaChtZGFkYXRhJG5vcm1fNTMyIDw9IDApLF0kbm9ybV81MzI9MWUtMTAKbWRhZGF0YWNhbGliPXN1YnNldChtZGFkYXRhLCBjdWx0dXJlPT0iYy0iKQptZGFkYXRhY2FsaWJfMCA9IHN1YnNldChtZGFkYXRhY2FsaWIsIGNvbmM9PTApCm1kYWRhdGFjYWxpYl8wLjEgPSBzdWJzZXQobWRhZGF0YWNhbGliLCBjb25jPT0wLjEpCm1kYWRhdGFjYWxpYl8wLjc1ID0gc3Vic2V0KG1kYWRhdGFjYWxpYiwgY29uYz09MC43NSkKCm1kYUF0ID0gc3Vic2V0KHN1YnNldChtZGFkYXRhLCBjdWx0dXJlPT0ibW9ubyIpLCBzcGVjaWVzID09ImF0IikKbWRhQ3QgPSBzdWJzZXQoc3Vic2V0KG1kYWRhdGEsIGN1bHR1cmU9PSJtb25vIiksIHNwZWNpZXMgPT0iY3QiKQptZGFBdEN0ZHVwbGkgPSBzdWJzZXQobWRhZGF0YSwgY3VsdHVyZT09ImNvIikKbWRhQXRDdCA9IHN1YnNldChtZGFBdEN0ZHVwbGksc3BlY2llcz09ImF0IikKbWRhQXQwMSA9IHN1YnNldChtZGFBdCwgY29uYz09MC4xKQptZGFDdDAxID0gc3Vic2V0KG1kYUN0LCBjb25jPT0wLjEpCm1kYUF0MDc1ID0gc3Vic2V0KG1kYUF0LCBjb25jPT0wLjc1KQptZGFDdDA3NSA9IHN1YnNldChtZGFDdCwgY29uYz09MC43NSkKbWRhY28wMSA9IHN1YnNldChtZGFBdEN0LGNvbmM9PTAuMSkKbWRhY28wNzUgPSBzdWJzZXQobWRhQXRDdCxjb25jPT0wLjc1KQoKCgojIyBHZW5lcmFsIGZ1bmN0aW9ucyAKZXZlbnRmdW4gPC0gZnVuY3Rpb24odCwgeSwgcGFybXMpewogIHdpdGggKGFzLmxpc3QoeSksewogICAgeVt5IDw9IGV4dF90aHJdIDwtIDAKICAgIHJldHVybih5KQogIH0pCn0KYGBgCgojIyMgMi4xIEZpdHRpbmcgZ3Jvd3RoIGluIE1NCgpBZ2FpbiB3ZSBmaXJzdCBmaXQgdGhlIE1NIHBhcmFtZXRlcnMgYnkgdXNpbmcgYm90aCBtb25vLSBhbmQgY28tY3VsdHVyZXMgaW4gdGhlIG5vLUxBIGNvbmRpdGlvbi4gV2UgcGVyZm9ybSBhZ2FpbiB0aGUgZml0dGluZyBiZWNhdXNlIHRoZSBkYXRhIGhhcyBjaGFuZ2VkIChuZXcgZXhwZXJpbWVudCkuCgpgYGB7cixlY2hvPUZBTFNFfQojIyBGaXR0aW5nIHRoZSBncm93dGggb2YgQXQgYW5kIEN0IGluIHRoZSBuby1MQSBjb25kaXRpb24gKG1pbmltYWwgbWVkaXVtKSB1c2luZyBib3RoIGNvY3VsdHVyZSBhbmQgbW9ub2N1dHVyZSBvZiBBdCBhbmQgQ3QgaW4gdGhlIG1pbmltYWwgbWVkaXVtCgojT0RFIHN5c3RlbSBmb3IgdGhlIG1pbmltYWwgbWVkaXVtICh1bmtub3duIG51dHJpZW50IGFyYml0cmFyaWx5KQoKRnVuY0NvTU1fbW9kZWwyPWZ1bmN0aW9uKHQsc3RhdGUscGFybXMpewogIHdpdGgoYXMubGlzdChjKHN0YXRlLHBhcm1zKSksIHsKICAgIGRCYWN0MSA9cm4xKk51LyhOdSArIEtuMSkqQmFjdDEgICAgCiAgICBkQmFjdDIgPXJuMipOdS8oTnUgKyBLbjIpKkJhY3QyCiAgICBkTnUgPSAtIDEvWW4xKnJuMSpOdS8oTnUgKyBLbjEpKkJhY3QxIC0gMS9ZbjIqcm4yKk51LyhOdSArIEtuMikqQmFjdDIgCiAgICByZXR1cm4obGlzdChjKGRCYWN0MSxkQmFjdDIsZE51KSkpCiAgfSkKfQoKCnNzcUZ1bmNDb01NX21vZGVsMj1mdW5jdGlvbihwYXJtc2VzdGltKXsKICBzc3FyZXMgPSB7fQogCiAgdGk9YyhzZXEoMCx0bWF4LDAuMDEpLGMoMCwxLDIsMyw2LDcsOCkpCiAgdGk9c29ydCh1bmlxdWUodGkpKQogIAogIHBhcm9kZSA9IDEwXnBhcm1zZXN0aW0KICAKICAjY29jdWx0dXJlIG9mIEN0IGFuZCBBdAogIG91dGNvPW9kZSh5PWMoQmFjdDE9Q3RNTXdBdGluaSxCYWN0Mj1BdE1Nd0N0aW5pLE51PWNvbXBpbmkpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvTU1fbW9kZWwyLHBhcm1zPXBhcm9kZSwgZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0Y29kZj1kYXRhLmZyYW1lKG91dGNvKQogIG91dGNvZGY9b3V0Y29kZltvdXRjb2RmJHRpbWUgJWluJSB0aW1lLF0KICBvdXRjb2RmW291dGNvZGY8ZXh0X3Rocl09ZXh0X3RocgogIGZvciAoaSBpbiAxOm5yZXApIHsKICAgIHNzcXJlcyA9IGMoc3NxcmVzLCBsb2cob3V0Y29kZiRCYWN0MSkgLSBsb2coQ3RNTXdBdFssaV0pLCBsb2cob3V0Y29kZiRCYWN0MikgLSBsb2coQXRNTXdDdFssaV0pKQogIH0KICAKICAjbW9ub2N1bCBvZiBDdAogIG91dEN0PW9kZSh5PWMoQmFjdDE9Q3RNTWluaSxCYWN0Mj0wLE51PWNvbXBpbmkpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvTU1fbW9kZWwyLHBhcm1zPXBhcm9kZSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKICBvdXRDdGRmPWRhdGEuZnJhbWUob3V0Q3QpCiAgb3V0Q3RkZj1vdXRDdGRmW291dEN0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dEN0ZGZbb3V0Q3RkZjxleHRfdGhyXT1leHRfdGhyCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzID0gYyhzc3FyZXMsIGxvZyhvdXRDdGRmJEJhY3QxKSAtIGxvZyhDdE1NWyxpXSkpCiAgfQogIAogIAogIAogIG91dEF0PW9kZSh5PWMoQmFjdDE9MCxCYWN0Mj1BdE1NaW5pLE51PWNvbXBpbmkpLHRpbWVzPXRpLGZ1bmM9RnVuY0NvTU1fbW9kZWwyLHBhcm1zPXBhcm9kZSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKICBvdXRBdGRmPWRhdGEuZnJhbWUob3V0QXQpCiAgb3V0QXRkZj1vdXRBdGRmW291dEF0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dEF0ZGZbb3V0QXRkZjxleHRfdGhyXT1leHRfdGhyCiAgCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzID0gYyhzc3FyZXMsIGxvZyhvdXRBdGRmJEJhY3QyKSAtIGxvZyhBdE1NWyxpXSkpCiAgfQogIAogIAogIHJldHVybihzc3FyZXMpCn0KCnBhcm1zZXN0aW0gPSBsb2cxMChjKHJuMT0xMCwgcm4yPTEwLCBZbjE9MWU5LCBZbjI9MmU4LCBLbjEgPSAxZS0xLCBLbjIgPSAxZS0yICkpCgoKaWYgKGJvb2xmaXQpIHtmaXRNTV9tb2RlbDI9bW9kRml0KHA9cGFybXNlc3RpbSxmPXNzcUZ1bmNDb01NX21vZGVsMil9CmNvZWZzPWNvZWYoZml0TU1fbW9kZWwyKQpgYGAKCmBgYHtyLGVjaG89RkFMU0UsZmlnLndpZHRoPTUsZmlnLmhlaWdodD00fQojIFBsb3R0aW5nIHRoZSBncm93dGggaW4gTU0gKyB0aGUgZml0CnBsb3QoQXRNTVssMV1+dGltZSx0eXBlPSJsIix5bGltPWMoMWU0LDFlNyksbG9nPSJ5Iixjb2w9YWxwaGEoY29sYSwwLjgpLGx3ZD0xLHlsYWI9IkNGVS9tTCIpCnBvaW50cyhBdE1NWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sYSwwLjgpKQpwb2ludHMoQXRNTVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbGEsMC44KSkKcG9pbnRzKEF0TU1bLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xhLDAuOCkpCmxpbmVzKEF0TU1bLDJdfnRpbWUsY29sPWFscGhhKGNvbGEsMC44KSxsd2Q9MSkKbGluZXMoQXRNTVssM11+dGltZSxjb2w9YWxwaGEoY29sYSwwLjgpLGx3ZD0xKQpwb2ludHMoQXRNTXdDdFssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbGEsMC44KSkKbGluZXMoQXRNTXdDdFssMV1+dGltZSxwY2g9MTksY29sPWFscGhhKGNvbGEsMC44KSxsdHk9ImRhc2hlZCIsbHdkPTEpCnBvaW50cyhBdE1Nd0N0WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sYSwwLjgpKQpsaW5lcyhBdE1Nd0N0WywyXX50aW1lLHBjaD0xOSxjb2w9YWxwaGEoY29sYSwwLjgpLGx0eT0iZGFzaGVkIixsd2Q9MSkKcG9pbnRzKEF0TU13Q3RbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xhLDAuOCkpCmxpbmVzKEF0TU13Q3RbLDNdfnRpbWUscGNoPTE5LGNvbD1hbHBoYShjb2xhLDAuOCksbHR5PSJkYXNoZWQiLGx3ZD0xKQpsaW5lcyhDdE1NWywxXX50aW1lLGNvbD1hbHBoYShjb2xjLDAuOCksbHdkPTEpCnBvaW50cyhDdE1NWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sYywwLjgpKQpwb2ludHMoQ3RNTVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbGMsMC44KSkKcG9pbnRzKEN0TU1bLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xjLDAuOCkpCmxpbmVzKEN0TU1bLDJdfnRpbWUsY29sPWFscGhhKGNvbGMsMC44KSxsd2Q9MSkKbGluZXMoQ3RNTVssM11+dGltZSxjb2w9YWxwaGEoY29sYywwLjgpLGx3ZD0xKQpwb2ludHMoQ3RNTXdBdFssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbGMsMC44KSkKbGluZXMoQ3RNTXdBdFssMV1+dGltZSxwY2g9MTksY29sPWFscGhhKGNvbGMsMC44KSxsdHk9ImRhc2hlZCIsbHdkPTEpCnBvaW50cyhDdE1Nd0F0WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sYywwLjgpKQpsaW5lcyhDdE1Nd0F0WywyXX50aW1lLHBjaD0xOSxjb2w9YWxwaGEoY29sYywwLjgpLGx0eT0iZGFzaGVkIixsd2Q9MSkKcG9pbnRzKEN0TU13QXRbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xjLDAuOCkpCmxpbmVzKEN0TU13QXRbLDNdfnRpbWUscGNoPTE5LGNvbD1hbHBoYShjb2xjLDAuOCksbHR5PSJkYXNoZWQiLGx3ZD0xKQpsZWdlbmQoeD0iYm90dG9tcmlnaHQiLAogICAgICAgYygiQXQiLCJBdCAoQ3QpIiwiQ3QiLCJDdCAoQXQpIiksCiAgICAgICBjb2w9YyhhbHBoYShjb2xhLDEpLGFscGhhKGNvbGEsMSksYWxwaGEoY29sYywxKSxhbHBoYShjb2xjLDEpKSwKICAgICAgIGx0eT1jKDEsMiwxLDIpLAogICAgICAgbHdkPWMoMSwxLDEsMSksCiAgICAgICBwY2g9YygyMCwyMCwyMCwyMCksYnR5PSJuIikKY29lZnNjb252ID0gMTBeY29lZnMKCgpzb2w9b2RlKHk9YyhCYWN0MT1DdE1Nd0F0aW5pLEJhY3QyPUF0TU13Q3RpbmksTnU9Y29tcGluaSksdGltZXM9dGksZnVuYz1GdW5jQ29NTV9tb2RlbDIscGFybXM9Y29lZnNjb252LGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQpwb2ludHMoQmFjdDF+dGksc29sLHR5cGU9ImwiLGx3ZD04LGx0eT0iZGFzaGVkIixjb2w9YWxwaGEoY29sYywwLjYpKQpwb2ludHMoQmFjdDJ+dGksc29sLHR5cGU9ImwiLGx3ZD04LGx0eT0iZGFzaGVkIixjb2w9YWxwaGEoY29sYSwwLjYpKQpzcz1vZGUoeT1jKEJhY3QxPUN0TU1pbmksQmFjdDI9MCxOdT1jb21waW5pKSx0aW1lcz10aSxmdW5jPUZ1bmNDb01NX21vZGVsMixwYXJtcz1jb2Vmc2NvbnYsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCnBvaW50cyhCYWN0MX50aSxzcyx0eXBlPSJsIixsd2Q9OCxjb2w9YWxwaGEoY29sYywwLjYpKQpzczI9b2RlKHk9YyhCYWN0MT0wLEJhY3QyPUF0TU1pbmksTnU9Y29tcGluaSksdGltZXM9dGksZnVuYz1GdW5jQ29NTV9tb2RlbDIscGFybXM9Y29lZnNjb252LGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQpwb2ludHMoQmFjdDJ+dGksc3MyLHR5cGU9ImwiLGx3ZD04LGNvbD1hbHBoYShjb2xhLDAuNikpCmBgYAoKYGBge3IsZWNobz1GQUxTRX0KCnBhcm1zQXRNTV9tb2RlbDIgPSBjKHJuID0gYXMubGlzdChjb2Vmc2NvbnYpJHJuMiwgS24gPSAgYXMubGlzdChjb2Vmc2NvbnYpJEtuMiwgWW4gPSAgYXMubGlzdChjb2Vmc2NvbnYpJFluMikKcGFybXNDdE1NX21vZGVsMiA9IGMocm4gPSBhcy5saXN0KGNvZWZzY29udikkcm4xLCBLbiA9ICBhcy5saXN0KGNvZWZzY29udikkS24xLCBZbiA9ICBhcy5saXN0KGNvZWZzY29udikkWW4xKQoKYGBgCgojIyMgMi4yIEZpdHRpbmcgUk9TIHNwb250YW5lb3VzIGR5bmFtaWNzIGluIExBIG1lZGl1bQoKYGBge3IsZWNobz1GQUxTRX0KIyMjIFNwb250YW5lb3VzIFJPUyBkeW5hbWljcyB3aXRoIGEgbm9uIGxpbmVhciBtb2RlbApGdW5jUm9zb25seSA9IGZ1bmN0aW9uKHQsc3RhdGUscGFybXMpewogIHdpdGgoYXMubGlzdChjKHN0YXRlLHBhcm1zKSksIHsKICAgIGRDb21wID0gLSAxL20qKGQqQ29tcCArIGUqUm9zKkNvbXApICN1cHRha2UgYnkgdGhlIHR3byBiYWN0ZXJpYSAtIHNwb250YW5lb3VzIG94aWRhdGlvbiAtIHJvcyB0cmlnZ2VyZWQgb3hpZGF0aW9uCiAgICBkUm9zID0gZCpDb21wICsgZSpSb3MqQ29tcCAtbCpSb3MgI294aWRhdGlvbiAtIHJlb3g/IAogICAgcmV0dXJuKGxpc3QoYyhkQ29tcCxkUm9zKSkpCiAgfSkKfQoKcm9zaW5pMDEgPSBtZWFuKHN1YnNldChtZGFkYXRhY2FsaWJfMC4xLCB0aW1lPT0wLHNlbGVjdD1jKG5vcm1fNTMyKSlbLDFdKQpyb3NpbmkwNzUgPSBtZWFuKHN1YnNldChtZGFkYXRhY2FsaWJfMC43NSwgdGltZT09MCxzZWxlY3Q9Yyhub3JtXzUzMikpWywxXSkKIAoKc3NxUk9TID0gZnVuY3Rpb24ocGFyKXsKICBzc3FyZXMgPSB7fQogIHRtYXg9OAogIHRpbWU9YygwLDEsMiwzLDYsNyw4KQogIHRpPWMoc2VxKDAsdG1heCwwLjAxKSx0aW1lKQogIHRpPXNvcnQodW5pcXVlKHRpKSkKICAKICAKICBwYXIxMCA9IDEwXnBhcgogIAogICMjIDAuMSUKICBkYXQgPSBtZGFkYXRhY2FsaWJfMC4xCiAgCiAgb3V0ID0gb2RlKHk9YyhDb21wPTAuMSxSb3M9cm9zaW5pMDEpLHRpbWVzPXRpLGZ1bmM9RnVuY1Jvc29ubHkscGFybXM9cGFyMTAsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgIyBGaWx0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIHRpbWUgcG9pbnRzIHdoZXJlIGRhdGEgaXMgYXZhaWxhYmxlCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICBzc3FyZXMwMSA9IHt9CiAgZm9yIChpIGluIGMoImNfMDFfMSIsImNfMDFfMiIsImNfMDFfMyIpKSB7CiAgICBzc3FyZXMwMSA9IGMoc3NxcmVzMDEsIGxvZyhvdXRkZiRSb3MpIC0gbG9nKHN1YnNldChkYXQsIHNhbXBsZT09aSxzZWxlY3Q9Yyhub3JtXzUzMikpWywxXSkpCiAgICAjc3NxcmVzMDEgPSBjKHNzcXJlczAxLCAob3V0ZGYkUm9zKSAtIChzdWJzZXQoZGF0LCBzYW1wbGU9PWksc2VsZWN0PWMobm9ybV81MzIpKVssMV0pKQoKICB9CiAgCiAgIyMgMC43NSUKICBkYXQgPSBtZGFkYXRhY2FsaWJfMC43NQogIHJvc2luaSA9IG1lYW4oc3Vic2V0KGRhdCwgdGltZT09MCxzZWxlY3Q9Yyhub3JtXzUzMikpWywxXSkKICAKICBvdXQgPSBvZGUoeT1jKENvbXA9MC43NSxSb3M9cm9zaW5pMDc1KSx0aW1lcz10aSxmdW5jPUZ1bmNSb3Nvbmx5LHBhcm1zPXBhcjEwLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogICMgRmlsdGVyIGRhdGEgdGhhdCBjb250YWlucyB0aW1lIHBvaW50cyB3aGVyZSBkYXRhIGlzIGF2YWlsYWJsZQogIG91dGRmPWRhdGEuZnJhbWUob3V0KQogIG91dGRmPW91dGRmW291dGRmJHRpbWUgJWluJSB0aW1lLF0KICBvdXRkZltvdXRkZjxleHRfdGhyXT1leHRfdGhyCiAgc3NxcmVzMDc1ID0ge30KICBmb3IgKGkgaW4gYygiY18wNzVfMSIsImNfMDc1XzIiLCJjXzA3NV8zIikpIHsKICAgICNzc3FyZXMwNzUgPSBjKHNzcXJlczA3NSwgKG91dGRmJFJvcykgLSAoc3Vic2V0KGRhdCwgc2FtcGxlPT1pLHNlbGVjdD1jKG5vcm1fNTMyKSlbLDFdKSkKICAgIHNzcXJlczA3NSA9IGMoc3NxcmVzMDc1LCBsb2cob3V0ZGYkUm9zKSAtIGxvZyhzdWJzZXQoZGF0LCBzYW1wbGU9PWksc2VsZWN0PWMobm9ybV81MzIpKVssMV0pKQogIH0KICAKICBzc3FyZXM9IGMoc3NxcmVzMDEsc3NxcmVzMDc1KQogIHJldHVybihzc3FyZXMpCiAgCn0KYGBgCgpgYGB7cixlY2hvPUZBTFNFfQpwYXJyb3MgPSBsb2cxMChjKGQ9MC4xLGU9MyxtPTMsbD0xKSkKaWYgKGJvb2xmaXQpIHtmaXRSb3MgPSBtb2RGaXQoZiA9IHNzcVJPUyxwPXBhcnJvcyxqYWMgPSBOVUxMKX0KZml0cm9zcGFyID0gMTBeY29lZihmaXRSb3MpCgpgYGAKCmBgYHtyLGVjaG89RkFMU0UsZmlnLndpZHRoPTUsZmlnLmhlaWdodD00fQpvdXQgPSBvZGUoeT1jKENvbXA9MC43NSxSb3M9cm9zaW5pMDc1KSx0aW1lcz10aSxmdW5jPUZ1bmNSb3Nvbmx5LHBhcm1zPWZpdHJvc3BhcixldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcGxvdChub3JtXzUzMn50aW1lLGRhdGE9bWRhZGF0YWNhbGliXzAuNzUsY29sPSJyZWQiLHlsaW09YygxZS00LDEpLGxvZz0ieSIseWxhYj0iUk9TIHByb3h5IChhLiB1LikiKQpsaW5lcyhvdXRbLDNdfm91dFssMV0sY29sPSJyZWQiKQpvdXQgPSBvZGUoeT1jKENvbXA9MC4xLFJvcz1yb3NpbmkwMSksdGltZXM9dGksZnVuYz1GdW5jUm9zb25seSxwYXJtcz1maXRyb3NwYXIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCmxpbmVzKG91dFssM11+b3V0WywxXSxjb2w9ImJsdWUiKQpwb2ludHMobm9ybV81MzJ+dGltZSxkYXRhPW1kYWRhdGFjYWxpYl8wLjEsY29sPSJibHVlIikKbGVnZW5kKCJib3R0b21yaWdodCIsbGVnZW5kPWMoIjAuMSUgTEEiLCIwLjc1JSBMQSIpLGNvbD1jKCJibHVlIiwicmVkIiksYnR5PSJuIixsd2Q9MSkKCmBgYAoKIyMjIDIuMyBGaXR0aW5nIEF0IG1vbm9jdWx0dXJlIHBhcmFtZXRlcnMKCmBgYHtyLGVjaG89RkFMU0V9CkZ1bmNSb3NNb25vQXQ9ZnVuY3Rpb24odCxzdGF0ZSxwYXJtcyl7CiAgd2l0aChhcy5saXN0KGMoc3RhdGUscGFybXMpKSwgewogICAgZEJhY3QgPSBybipOdS8oTnUgKyBLbikqQmFjdCArIHJjKkNvbXAvKENvbXAgKyBLYykqQmFjdCAtIGJldGEqQmFjdCpSb3MgIyMgZ3Jvd2luZyBvbiBMQQogICAgZE51ID0gLSAxL1luKnJuKk51LyhOdSArIEtuKSpCYWN0CiAgICBkQ29tcCA9IC0xL1ljKnJjKkNvbXAvKENvbXAgKyBLYykqQmFjdCAtIDEvbSooZCpDb21wICsgZSpSb3MqQ29tcCkgI3VwdGFrZSBieSB0aGUgdHdvIGJhY3RlcmlhIC0gc3BvbnRhbmVvdXMgb3hpZGF0aW9uIC0gcm9zIHRyaWdnZXJlZCBveGlkYXRpb24KICAgIGRSb3MgPSBkKkNvbXAgKyBlKlJvcypDb21wIC1sKlJvcyAtIGFscGhhKkJhY3QqUm9zICAgI294aWRhdGlvbiAtIGRldG94IAogICAgcmV0dXJuKGxpc3QoYyhkQmFjdCxkTnUsZENvbXAsZFJvcykpKQogIH0pCn0KCgpzc3FNb25vUm9zQXQ9ZnVuY3Rpb24ocGFybXNlc3RBdCl7CiAgc3NxcmVzID0ge30KICB0aT1jKHNlcSgwLHRtYXgsMC4wMSksYygwLDEsMiwzLDYsNyw4KSkKICB0aT1zb3J0KHVuaXF1ZSh0aSkpCiAgCiAgcGFybXNvZGUgPSBjKDEwXnBhcm1zZXN0QXQscGFybXNBdE1NLGZpdHJvc3BhcikgI3Bhcm1DdCBkb2VzIG5vdCBtYXR0ZXIgZm9yIG5vdwogICMgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXIgZXN0aW1hdGlvbiByb3V0aW5lCiAgIyBzb2x2ZSBPREUgZm9yIGEgZ2l2ZW4gc2V0IG9mIHBhcmFtZXRlcnMKICAKICBkYXQgPSBtZGFBdDAxCiAgc3NxcmVzMDEgPSB7fQogIHJlcGM9IGMoImF0XzAxXzEiLCJhdF8wMV8yIiwiYXRfMDFfMyIpCiAgCiAgCiAgb3V0PW9kZSh5PWMoQmFjdD1BdDAxaW5pLE51PWNvbXBpbmksQ29tcD0wLjEsUm9zPXJvc2luaTAxKSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQXQscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgIyBGaWx0ZXIgZGF0YSB0aGF0IGNvbnRhaW5zIHRpbWUgcG9pbnRzIHdoZXJlIGRhdGEgaXMgYXZhaWxhYmxlCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICAKICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMwMSA9IGMoc3NxcmVzMDEsIGxvZyhvdXRkZiRCYWN0KSAtIGxvZyhBdDAxWyxpXSkpIAogICAgc3NxcmVzMDEgPSBjKHNzcXJlczAxLCBsb2cob3V0ZGYkUm9zKSAtIGxvZyhzdWJzZXQoZGF0LCBzYW1wbGU9PXJlcGNbaV0sc2VsZWN0PWMobm9ybV81MzIpKVssMV0pKQogIH0KICAKICAKICBkYXQgPSBtZGFBdDA3NQogIHNzcXJlczA3NSA9IHt9CiAgcmVwYz0gYygiYXRfMDc1XzEiLCJhdF8wNzVfMiIsImF0XzA3NV8zIikKICAKICBvdXQyPW9kZSh5PWMoQmFjdD1BdDA3NWluaSxOdT1jb21waW5pLENvbXA9MC43NSxSb3MgPXJvc2luaTA3NSksdGltZXM9dGksZnVuYz1GdW5jUm9zTW9ub0F0LHBhcm1zPXBhcm1zb2RlLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogIG91dGRmMj1kYXRhLmZyYW1lKG91dDIpCiAgb3V0ZGYyPW91dGRmMltvdXRkZjIkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmMltvdXRkZjI8ZXh0X3Rocl09ZXh0X3RocgogIAogIGZvciAoaSBpbiAxOm5yZXApIHsKICAgIHNzcXJlczA3NSA9IGMoc3NxcmVzMDc1LCBsb2cob3V0ZGYyJEJhY3QpIC0gbG9nKEF0MDc1WyxpXSkpIAogICAgc3NxcmVzMDc1ID0gYyhzc3FyZXMwNzUsIGxvZyhvdXRkZjIkUm9zKSAtIGxvZyhzdWJzZXQoZGF0LCBzYW1wbGU9PXJlcGNbaV0sc2VsZWN0PWMobm9ybV81MzIpKVssMV0pKQogIH0KICAKICBzc3FyZXMgPSBjKHNzcXJlczAxLHNzcXJlczA3NSkKIAogIAogICMgcmV0dXJuIHByZWRpY3RlZCB2cyBleHBlcmltZW50YWwgcmVzaWR1YWwKICByZXR1cm4obmEub21pdChzc3FyZXMpKQp9CmBgYAoKYGBge3IsZWNobz1GQUxTRX0KcGFybUF0ID0gYyhyYyA9IDMsIEtjID0gMC4xLCBZYyA9MWUxMCwgYmV0YSA9IDIwLCBhbHBoYSA9IDFlLTIwKQppZiAoYm9vbGZpdCkge2ZpdE1vbm9BdF9tb2RlbDIgPSBtb2RGaXQoZiA9IHNzcU1vbm9Sb3NBdCxwPWxvZzEwKHBhcm1BdCksamFjID0gTlVMTCxsb3dlciA9IGMoLTUsLTYsLTUsLTUsLTEwMCksdXBwZXIgPSBjKDEwLDEwLDE0LDEwLDEwKSl9CiNjb2VmKGZpdE1vbm9BdF9tb2RlbDIpCmBgYAoKYGBge3IsZWNobz1GQUxTRSxmaWcud2lkdGg9NSxmaWcuaGVpZ2h0PTR9CnBhcmEgPSBjKDEwXmNvZWYoZml0TW9ub0F0X21vZGVsMiksIHBhcm1zQXRNTV9tb2RlbDIsIGZpdHJvc3BhcikKCm91dD1vZGUoeT1jKEJhY3QgPSBBdDAxaW5pLE51PWNvbXBpbmksQ29tcCA9IDAuMSxSb3M9cm9zaW5pMDEpLHRpbWVzPXRpLGZ1bmM9RnVuY1Jvc01vbm9BdCxwYXJtcz1wYXJhLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpLGF0b2w9MWUtNSkKCnBsb3Qob3V0WywyXX5vdXRbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1jb2xBdFsyXSxsdHk9ImRvdHRlZCIseWxpbT1jKDEsMWUxMCksbG9nPSJ5IixtYWluPSJGaXR0aW5nIG1vbm9jdWx0dXJlIG9mIEF0IChtb2RlbCAyKSIseGxhYj0idGltZSIseWxhYj0iQ0ZVL21MIikKb3V0PW9kZSh5PWMoQmFjdCA9IEF0MDc1aW5pLE51PWNvbXBpbmksQ29tcCA9MC43NSxSb3M9cm9zaW5pMDc1KSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQXQscGFybXM9cGFyYSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSxhdG9sPTFlLTUpCnBvaW50cyhvdXRbLDJdfm91dFssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWNvbEF0WzRdLGx0eT0iZG90dGVkIikKCnBvaW50cyhBdDAxWywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCnBvaW50cyhBdDAxWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpKQpsaW5lcyhBdDAxWywyXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCnBvaW50cyhBdDAxWywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbM10sdHJhbnNwYXIpKQpsaW5lcyhBdDAxWywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCnBvaW50cyhBdDAxWywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQoKbGluZXMoQXQwNzVbLDFdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzRdLDAuNSksbHdkPTIpCnBvaW50cyhBdDA3NVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLDAuNSksbHdkPTIpCmxpbmVzKEF0MDc1WywyXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yKQpwb2ludHMoQXQwNzVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yKQpsaW5lcyhBdDA3NVssM11+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbNF0sMC41KSxsd2Q9MikKcG9pbnRzKEF0MDc1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sMC41KSxsd2Q9MikKbGVnZW5kKCJib3R0b21sZWZ0IixsZWdlbmQ9YygiMC4xJSIsIjAuNzUlIiksY29sPWMoY29sQXRbMl0sY29sQXRbNF0pLHBjaD0xOSxidHk9Im4iLGx3ZD0yKQpgYGAKCiMjIyAyLjQgRml0dGluZyBDdCBtb25vY3VsdHVyZSBwYXJhbWV0ZXJzCgpgYGB7cixlY2hvPUZBTFNFfQpGdW5jUm9zTW9ub0N0PWZ1bmN0aW9uKHQsc3RhdGUscGFybXMpewogIHdpdGgoYXMubGlzdChjKHN0YXRlLHBhcm1zKSksIHsKICAgIGRCYWN0ID0gcm4qTnUvKE51ICsgS24pKkJhY3QgKyByYypDb21wLyhDb21wICsgS2MpKkJhY3QgLSBiZXRhKkJhY3QqUm9zICMjIGdyb3dpbmcgb24gTEEKICAgIGROdSA9IC0gMS9ZbipybipOdS8oTnUgKyBLbikqQmFjdAogICAgZENvbXAgPSAtMS9ZYypyYypDb21wLyhDb21wICsgS2MpKkJhY3QgLSAxL20qKGQqQ29tcCArIGUqUm9zKkNvbXApICN1cHRha2UgYnkgdGhlIGJhY3RlcmlhIC0gc3BvbnRhbmVvdXMgb3hpZGF0aW9uIC0gcm9zIHRyaWdnZXJlZCBveGlkYXRpb24KICAgIGRSb3MgPSBkKkNvbXAgKyBlKlJvcypDb21wIC1sKlJvcyAtIGFscGhhKkJhY3QqUm9zICAjb3hpZGF0aW9uIC0gZGV0b3ggCiAgICByZXR1cm4obGlzdChjKGRCYWN0LGROdSxkQ29tcCxkUm9zKSkpCiAgfSkKfQoKc3NxTW9ub1Jvc0N0PWZ1bmN0aW9uKHBhcm1zZXN0Q3QpewoKICBzc3FyZXMgPSB7fQogIHRpPWMoc2VxKDAsdG1heCwwLjAxKSxjKDAsMSwyLDMsNiw3LDgpKQogIHRpPXNvcnQodW5pcXVlKHRpKSkKICAKICBwYXJtc29kZSA9IGMoMTBecGFybXNlc3RDdCxwYXJtc0N0TU0sZml0cm9zcGFyKQogIAogIHJlcGM9IGMoImN0XzAxXzEiLCJjdF8wMV8yIiwiY3RfMDFfMyIpCiAgb3V0PW9kZSh5PWMoQmFjdD1DdDAxaW5pLE51PWNvbXBpbmksQ29tcD0wLjEsUm9zPXJvc2luaTAxKSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQ3QscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMgPSBjKHNzcXJlcywgbG9nKG91dGRmJEJhY3QpIC0gbG9nKEN0MDFbLGldKSkKICAgIHNzcXJlcyA9IGMoc3NxcmVzLCBsb2cob3V0ZGYkUm9zKSAtIGxvZyhzdWJzZXQobWRhQ3QwMSwgc2FtcGxlPT1yZXBjW2ldLHNlbGVjdD1jKG5vcm1fNTMyKSlbLDFdKSkKICB9CiAgCiAgCiAgcmVwYz0gYygiY3RfMDc1XzEiLCJjdF8wNzVfMiIsImN0XzA3NV8zIikKICBvdXQyPW9kZSh5PWMoQmFjdD1DdDA3NWluaSxOdT1jb21waW5pLENvbXA9MC43NSxSb3M9cm9zaW5pMDc1KSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQ3QscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0ZGYyPWRhdGEuZnJhbWUob3V0MikKICBvdXRkZjI9b3V0ZGYyW291dGRmMiR0aW1lICVpbiUgdGltZSxdCiAgb3V0ZGYyW291dGRmMjxleHRfdGhyXT1leHRfdGhyCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzID0gYyhzc3FyZXMsIGxvZyhvdXRkZjIkQmFjdCkgLSBsb2coQ3QwNzVbLGldKSkgCiAgICBzc3FyZXMgPSBjKHNzcXJlcywgbG9nKG91dGRmMiRSb3MpIC0gbG9nKHN1YnNldChtZGFDdDA3NSwgc2FtcGxlPT1yZXBjW2ldLHNlbGVjdD1jKG5vcm1fNTMyKSlbLDFdKSApCiAgfQogIAogICMgcmV0dXJuIHByZWRpY3RlZCB2cyBleHBlcmltZW50YWwgcmVzaWR1YWwKICByZXR1cm4obmEub21pdChzc3FyZXMpKQp9CgpwYXJtQ3QgPSBjKHJjID0gNSwgS2MgPSAwLjEsIFljID03ZTksIGFscGhhPTAuMDAwMSwgYmV0YSA9MTApCiMgCiMgcGFyYSA9IGMocGFybUN0LCBwYXJtc0N0TU1fbW9kZWwyLGZpdHJvc3BhcikKIyBwbG90KEN0MDFbLDFdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSx5bGFiPSJDRlUgIixsb2c9InkiLHlsaW09YygxZTQsMWUxMCksbWFpbj0iTW9ub2N1bHR1cmUgb2YgQ3QgYXQgZGlmZmVyZW50IGxpbm9sZWljIGFjaWQgY29uY2VudHJhdGlvbnMiKQojIHBvaW50cyhDdDAxWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbM10sdHJhbnNwYXIpKQojIGxpbmVzKEN0MDFbLDJdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKIyBwb2ludHMoQ3QwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSkKIyBsaW5lcyhDdDAxWywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhcikpCiMgcG9pbnRzKEN0MDFbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhcikpCiMgCiMgbGluZXMoQ3QwNzVbLDFdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIpCiMgcG9pbnRzKEN0MDc1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MikKIyBsaW5lcyhDdDA3NVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MikKIyBwb2ludHMoQ3QwNzVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yKQojIGxpbmVzKEN0MDc1WywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yKQojIHBvaW50cyhDdDA3NVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIpCiMgbGVnZW5kKCJib3R0b21yaWdodCIsbGVnZW5kPWMoIjAuMSUiLCIwLjc1JSIpLGNvbD1jKGNvbEN0WzJdLGNvbEN0WzRdKSxwY2g9MTksYnR5PSJuIixsd2Q9MikKIyAKIyBvdXQ9b2RlKHk9YyhCYWN0ID0gQ3QwMWluaSxOdT1jb21waW5pLENvbXAgPSAwLjEsUm9zPXJvc2luaTAxKSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQ3QscGFybXM9cGFyYSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKIyBwb2ludHMob3V0WywyXX5vdXRbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1jb2xDdFsyXSxsdHk9ImRvdHRlZCIpCiMgb3V0PW9kZSh5PWMoQmFjdCA9IEN0MDc1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuNzUsUm9zPXJvc2luaTA3NSksdGltZXM9dGksZnVuYz1GdW5jUm9zTW9ub0N0LHBhcm1zPXBhcmEsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiMgcG9pbnRzKG91dFssMl1+b3V0WywxXSx0eXBlPSJsIixsd2Q9NSxjb2w9Y29sQ3RbNF0sbHR5PSJkb3R0ZWQiKQpgYGAKCmBgYHtyLGVjaG89RkFMU0V9CmlmIChib29sZml0KSB7Zml0TW9ub0N0X21vZGVsMiA9IG1vZEZpdChmID0gc3NxTW9ub1Jvc0N0LHA9bG9nMTAocGFybUN0KSxqYWMgPSBOVUxMLGxvd2VyID0gYygtMiwtNSwwLC0xMCwtMTApLHVwcGVyID0gYygzLDMsMTQsNSw1KSl9CmBgYAoKYGBge3IsZWNobz1GQUxTRX0KI3ByaW50KDEwXmNvZWYoZml0TW9ub0N0X21vZGVsMikpCmBgYAoKYGBge3IsZWNobz1GQUxTRSxmaWcud2lkdGg9NSxmaWcuaGVpZ2h0PTR9CnBhcmEgPSBjKDEwXmNvZWYoZml0TW9ub0N0X21vZGVsMiksIHBhcm1zQ3RNTV9tb2RlbDIsZml0cm9zcGFyKQpwbG90KEN0MDFbLDFdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSx5bGFiPSJDRlUvbUwgIixsb2c9InkiLHlsaW09YygxZTQsMWUxMCksbWFpbj0iRml0dGluZyBDdCBpbiBtb25vY3VsdHVyZSAobW9kZWwgMikiKQpwb2ludHMoQ3QwMVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSkKbGluZXMoQ3QwMVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQpwb2ludHMoQ3QwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzNdLHRyYW5zcGFyKSkKbGluZXMoQ3QwMVssM11+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQpwb2ludHMoQ3QwMVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKCmxpbmVzKEN0MDc1WywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yKQpwb2ludHMoQ3QwNzVbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yKQpsaW5lcyhDdDA3NVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MikKcG9pbnRzKEN0MDc1WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MikKbGluZXMoQ3QwNzVbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIpCnBvaW50cyhDdDA3NVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIpCmxlZ2VuZCgiYm90dG9tcmlnaHQiLGxlZ2VuZD1jKCIwLjA1JSIsIjAuMSUiLCIwLjUlIiwiMC43NSUiKSxjb2w9Y29sQ3QscGNoPTE5LGJ0eT0ibiIsbHdkPTIpCgpvdXQ9b2RlKHk9YyhCYWN0ID0gQ3QwMWluaSxOdT1jb21waW5pLENvbXAgPSAwLjEsUm9zPXJvc2luaTAxKSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQ3QscGFybXM9cGFyYSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcG9pbnRzKG91dFssMl1+b3V0WywxXSx0eXBlPSJsIixsd2Q9NSxjb2w9Y29sQ3RbMl0sbHR5PSJkb3R0ZWQiKQpvdXQ9b2RlKHk9YyhCYWN0ID0gQ3QwNzVpbmksTnU9Y29tcGluaSxDb21wID0gMC43NSxSb3M9cm9zaW5pMDc1KSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQ3QscGFybXM9cGFyYSxldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKcG9pbnRzKG91dFssMl1+b3V0WywxXSx0eXBlPSJsIixsd2Q9NSxjb2w9Y29sQ3RbNF0sbHR5PSJkb3R0ZWQiKQoKYGBgCgojIyMgMi41IENvbXBhcmluZyBjby1jdWx0dXJlcyBhbmQgbW9uby1jdWx0dXJlcwoKYGBge3IsZWNobz1GQUxTRSxmaWcuaGVpZ2h0PTYsZmlnLndpZHRoPTEyfQpjb2VmQ3Rtb25vID0gYXMubGlzdCgxMF5jb2VmKGZpdE1vbm9DdF9tb2RlbDIpKQpjb2VmQXRtb25vID0gYXMubGlzdCgxMF5jb2VmKGZpdE1vbm9BdF9tb2RlbDIpKQoKY29lZnRvdF9tb2RlbDIgPSBsaXN0KHJjMSA9IGNvZWZDdG1vbm8kcmMsCiAgICAgICAgICAgICAgIEtjMSA9IGNvZWZDdG1vbm8kS2MsCiAgICAgICAgICAgICAgIGJldGExID0gY29lZkN0bW9ubyRiZXRhLAogICAgICAgICAgICAgICBZYzEgPSBjb2VmQ3Rtb25vJFljLAogICAgICAgICAgICAgICBhbHBoYTEgPSBjb2VmQ3Rtb25vJGFscGhhLAoKICAgICAgICAgICAgICAgcmMyID0gY29lZkF0bW9ubyRyYywKICAgICAgICAgICAgICAgS2MyID0gY29lZkF0bW9ubyRLYywKICAgICAgICAgICAgICAgYmV0YTIgPSBjb2VmQXRtb25vJGJldGEsCiAgICAgICAgICAgICAgIFljMiA9IGNvZWZBdG1vbm8kWWMsCiAgICAgICAgICAgICAgIGFscGhhMiA9IGNvZWZBdG1vbm8kYWxwaGEpCnBhcm10b3RfbW9kZWwyID0gYyhjb2VmdG90X21vZGVsMiwgYXMubGlzdCgxMF5jb2VmKGZpdE1NX21vZGVsMikpLCBhcy5saXN0KGZpdHJvc3BhcikpCgoKCkZ1bmNSb3NDbz1mdW5jdGlvbih0LHN0YXRlLHBhcm1zKXsKICB3aXRoKGFzLmxpc3QoYyhzdGF0ZSxwYXJtcykpLCB7CiAgICBkQmFjdDEgPSBybjEqTnUvKE51ICsgS24xKSpCYWN0MSArIHJjMSpDb21wLyhDb21wICsgS2MxKSpCYWN0MSAtIGJldGExKkJhY3QxKlJvcyAjIyBncm93aW5nIG9uIExBCiAgICAKICAgIGRCYWN0MiA9IHJuMipOdS8oTnUgKyBLbjIpKkJhY3QyICsgcmMyKkNvbXAvKENvbXAgKyBLYzIpKkJhY3QyIC0gYmV0YTIqQmFjdDIqUm9zICNncm93aW5nIG9uIExBIG1pbnVzIHNvbWUgdG94aWNpdHkgb2YgdGhlIFJPUwogICAgCiAgICBkTnUgPSAtIDEvWW4xKnJuMSpOdS8oTnUgKyBLbjEpKkJhY3QxIC0gMS9ZbjIqcm4yKk51LyhOdSArIEtuMikqQmFjdDIKICAgIAogICAgZENvbXAgPSAtMS9ZYzEqcmMxKkNvbXAvKENvbXAgKyBLYzEpKkJhY3QxIC0xL1ljMipyYzIqQ29tcC8oQ29tcCArIEtjMikqQmFjdDIgLSAxL20qKGQqQ29tcCArIGUqUm9zKkNvbXApICN1cHRha2UgYnkgdGhlIHR3byBiYWN0ZXJpYSAtIHNwb250YW5lb3VzIG94aWRhdGlvbiAtIHJvcyB0cmlnZ2VyZWQgb3hpZGF0aW9uCiAgICAKICAgIGRSb3MgPSBkKkNvbXAgKyBlKlJvcypDb21wIC0gbCpSb3MgLSBhbHBoYTEqQmFjdDEqUm9zIC0gYWxwaGEyKkJhY3QyKlJvcyAKICAgIAogICAgCiAgICByZXR1cm4obGlzdChjKGRCYWN0MSxkQmFjdDIsZE51LGRDb21wLGRSb3MpKSkKICB9KQp9CgoKY29jdWx0MSA9IG9kZSh5PWMoQmFjdDEgPSBDdEF0MDFpbmksQmFjdDIgPSBBdEN0MDFpbmksTnU9Y29tcGluaSxDb21wID0gMC4xLFJvcz1yb3NpbmkwMSksdGltZXM9dGksZnVuYz1GdW5jUm9zQ28scGFybXM9IHBhcm10b3RfbW9kZWwyLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQoKY29jdWx0MiA9IG9kZSh5PWMoQmFjdDEgPSBDdEF0MDc1aW5pLEJhY3QyID0gQXRDdDA3NWluaSxOdT1jb21waW5pLENvbXAgPSAwLjc1LFJvcz1yb3NpbmkwNzUpLHRpbWVzPXRpLGZ1bmM9RnVuY1Jvc0NvLHBhcm1zPXBhcm10b3RfbW9kZWwyLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQoKcGFyKG1mcm93PWMoMSwyKSkKCnBsb3QoQ3RBdDAxWywxXX50aW1lLGNvbD1hbHBoYShjb2xDdFsyXSwwLjUpLGx3ZD0yLHR5cGU9ImwiLHlsaW09YygxZTQsMWUxMCksbG9nPSJ5IixsdHk9InNvbGlkIiwgeWxhYj0iQ0ZVL21MIixtYWluPSJDb2N1bHR1cmVzIGF0IDAuMSUiLGJ0eT0ibiIpCnBvaW50cyhDdEF0MDFbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhcikpCnBvaW50cyhDdEF0MDFbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhcikpCnBvaW50cyhDdEF0MDFbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhcikpCmxpbmVzKEN0QXQwMVssMl1+dGltZSxjb2w9YWxwaGEoY29sQ3RbMl0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKbGluZXMoQ3RBdDAxWywzXX50aW1lLGNvbD1hbHBoYShjb2xDdFsyXSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhBdEN0MDFbLDFdfnRpbWUsY29sPWFscGhhKGNvbEF0WzJdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCnBvaW50cyhBdEN0MDFbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCnBvaW50cyhBdEN0MDFbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCnBvaW50cyhBdEN0MDFbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFsyXSx0cmFuc3BhcikpCmxpbmVzKEF0Q3QwMVssMl1+dGltZSxjb2w9YWxwaGEoY29sQXRbMl0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKbGluZXMoQXRDdDAxWywzXX50aW1lLGNvbD1hbHBoYShjb2xBdFsyXSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQoKbGluZXMoQmFjdDF+dGltZSxjb2N1bHQxLGNvbD1jb2xDdFsyXSxsdHk9ImRvdHRlZCIsbHdkPTMpCmxpbmVzKEJhY3QyfnRpbWUsY29jdWx0MSxjb2w9Y29sQXRbMl0sbHR5PSJkb3R0ZWQiLGx3ZD0zKQpsZWdlbmQoImJvdHRvbXJpZ2h0IixsZWdlbmQ9YygiQ3QoQXQpIChkYXRhKSIsIkF0KEN0KSAoZGF0YSkiLCJDdChBdCkgKHByZWRpY3Rpb24pIiwiQXQoQ3QpIChwcmVkaWN0aW9uKSIpLGNvbD1jKGFscGhhKGNvbEN0WzJdLDAuNSksYWxwaGEoY29sQXRbMl0sMC41KSxjb2xDdFsyXSxjb2xBdFsyXSksbHR5PWMoInNvbGlkIiwic29saWQiLCJkb3R0ZWQiLCJkb3R0ZWQiKSxsd2Q9YygyLDIsMiwyKSxidHk9Im4iLGNleD0wLjgpCgoKcGxvdChDdEF0MDc1WywxXX50aW1lLGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yLHR5cGU9ImwiLGxvZz0ieSIseWxpbT1jKDFlNCwxZTEwKSxsdHk9InNvbGlkIix5bGFiPSJDRlUvbUwiLG1haW49IkNvY3VsdHVyZXMgYXQgMC43NSUiLGJ0eT0ibiIpCnBvaW50cyhDdEF0MDc1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpKQpwb2ludHMoQ3RBdDA3NVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSkKcG9pbnRzKEN0QXQwNzVbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhcikpCmxpbmVzKEN0QXQwNzVbLDJdfnRpbWUsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmxpbmVzKEN0QXQwNzVbLDNdfnRpbWUsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCnBvaW50cyhBdEN0MDc1WywxXX50aW1lLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yLHR5cGU9ImwiLGx0eT0ic29saWQiKQpwb2ludHMoQXRDdDA3NVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSkKcG9pbnRzKEF0Q3QwNzVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhcikpCnBvaW50cyhBdEN0MDc1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpKQpsaW5lcyhBdEN0MDc1WywyXX50aW1lLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhBdEN0MDc1WywzXX50aW1lLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQoKcG9pbnRzKEJhY3QxfnRpbWUsY29jdWx0Mix0eXBlPSJsIixjb2w9Y29sQ3RbNF0sbHdkPTUsbHR5PSJkb3R0ZWQiKQpwb2ludHMoQmFjdDJ+dGltZSxjb2N1bHQyLHR5cGU9ImwiLGNvbD1jb2xBdFs0XSxsd2Q9NSxsdHk9ImRvdHRlZCIpCmxlZ2VuZCgiYm90dG9tcmlnaHQiLGxlZ2VuZD1jKCJDdChBdCkgKGRhdGEpIiwiQXQoQ3QpIChkYXRhKSIsIkN0KEF0KSAocHJlZGljdGlvbikiLCJBdChDdCkgKHByZWRpY3Rpb24pIiksY29sPWMoYWxwaGEoY29sQ3RbNF0sMC41KSxhbHBoYShjb2xBdFs0XSwwLjUpLGNvbEN0WzRdLGNvbEF0WzRdKSxsdHk9Yygic29saWQiLCJzb2xpZCIsImRvdHRlZCIsImRvdHRlZCIpLGx3ZD1jKDIsMiwzLDMpLGJ0eT0ibiIsY2V4PTAuOCkKCmBgYAoKYGBge3IsZWNobz1GQUxTRX0KIyMgQ29tcHV0ZSB0aGUgZXJyb3Igb2YgbW9kZWwgMiAoc3VtIG9mIHNxdWFyZXMpCgojZXJyb3IgYXQgMC4xJQpjb2N1bHQxZGY9ZGF0YS5mcmFtZShjb2N1bHQxKQpjb2N1bHQxZGY9Y29jdWx0MWRmW2NvY3VsdDFkZiR0aW1lICVpbiUgdGltZSxdCmNvY3VsdDFkZltjb2N1bHQxZGY8ZXh0X3Rocl09ZXh0X3Rocgpzc3Fjb2N1bHQxID0ge30KZm9yIChpIGluIDE6bnJlcCkgewogIHNzcWNvY3VsdDEgPSBjKHNzcWNvY3VsdDEsIGxvZyhjb2N1bHQxZGYkQmFjdDEpIC0gbG9nKEN0QXQwMVssaV0pLCBsb2coY29jdWx0MWRmJEJhY3QyKSAtIGxvZyhBdEN0MDFbLGldKSkgI2FkZCByZXNpZHVhbCBjb21wYXJpbmcgZXN0aW1hdGVkIHdpdGggdGhlIGRpZmZlcmVudCByZXBsaWNhdGVzCn0KcHJpbnQocGFzdGUoIlN1bSBvZiBlcnJvcnMgYXQgMC4xJTogIiwgc3VtKHNzcWNvY3VsdDFeMikpKQoKI2Vycm9yIGF0IDAuNzUlCmNvY3VsdDJkZj1kYXRhLmZyYW1lKGNvY3VsdDIpCmNvY3VsdDJkZj1jb2N1bHQyZGZbY29jdWx0MmRmJHRpbWUgJWluJSB0aW1lLF0KY29jdWx0MmRmW2NvY3VsdDJkZjxleHRfdGhyXT1leHRfdGhyCnNzcWNvY3VsdDIgPSB7fQpmb3IgKGkgaW4gMTpucmVwKSB7CiAgc3NxY29jdWx0MiA9IGMoc3NxY29jdWx0MiwgbG9nKGNvY3VsdDJkZiRCYWN0MSkgLSBsb2coQ3RBdDA3NVssaV0pLCBsb2coY29jdWx0MmRmJEJhY3QyKSAtIGxvZyhBdEN0MDc1WyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwp9CnByaW50KHBhc3RlKCJTdW0gb2YgZXJyb3JzIGF0IDAuNzUlOiAiLCBzdW0oc3NxY29jdWx0Ml4yKSkpCgoKcHJpbnQocGFzdGUoIlRvdGFsIHN1bSBvZiBlcnJvcnM6ICIsIHN1bShzc3Fjb2N1bHQyXjIpK3N1bShzc3Fjb2N1bHQxXjIpKSkKYGBgCgojIyMgMi42IFBhcmFtZXRlciBzZXQgb2YgdGhlIG1haW4gdGV4dAoKYGBge3IsZWNobz1GQUxTRX0Kc3NxTW9ub1Jvc0F0X29ubHlDRlU9ZnVuY3Rpb24ocGFybXNlc3RBdCl7CiAgc3NxcmVzID0ge30KICB0aT1jKHNlcSgwLHRtYXgsMC4wMSksYygwLDEsMiwzLDYsNyw4KSkKICB0aT1zb3J0KHVuaXF1ZSh0aSkpCiAgCiAgI3Bhcm1zb2RlID0gYygxMF5wYXJtc2VzdEF0LHBhcm1zQXRNTSxmaXRyb3NwYXIpCiAgIyBwYXJhbWV0ZXJzIGZyb20gdGhlIHBhcmFtZXRlciBlc3RpbWF0aW9uIHJvdXRpbmUKICAjIHNvbHZlIE9ERSBmb3IgYSBnaXZlbiBzZXQgb2YgcGFyYW1ldGVycwogIAogIHBhcm1zb2RlID0gcGFybXNlc3RBdAoKICBzc3FyZXMwMSA9IHt9CiAgIAogIG91dD1vZGUoeT1jKEJhY3Q9QXQwMWluaSxOdT1jb21waW5pLENvbXA9MC4xLFJvcz1yb3NpbmkwMSksdGltZXM9dGksZnVuYz1GdW5jUm9zTW9ub0F0LHBhcm1zPXBhcm1zb2RlLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogICMgRmlsdGVyIGRhdGEgdGhhdCBjb250YWlucyB0aW1lIHBvaW50cyB3aGVyZSBkYXRhIGlzIGF2YWlsYWJsZQogIG91dGRmPWRhdGEuZnJhbWUob3V0KQogIG91dGRmPW91dGRmW291dGRmJHRpbWUgJWluJSB0aW1lLF0KICBvdXRkZltvdXRkZjxleHRfdGhyXT1leHRfdGhyCiAgCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzMDEgPSBjKHNzcXJlczAxLCBsb2cob3V0ZGYkQmFjdCkgLSBsb2coQXQwMVssaV0pKSAKICAgCiAgfQogIAogIAoKICBzc3FyZXMwNzUgPSB7fQogIG91dDI9b2RlKHk9YyhCYWN0PUF0MDc1aW5pLE51PWNvbXBpbmksQ29tcD0wLjc1LFJvcyA9cm9zaW5pMDc1KSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQXQscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0ZGYyPWRhdGEuZnJhbWUob3V0MikKICBvdXRkZjI9b3V0ZGYyW291dGRmMiR0aW1lICVpbiUgdGltZSxdCiAgb3V0ZGYyW291dGRmMjxleHRfdGhyXT1leHRfdGhyCiAgCiAgZm9yIChpIGluIDE6bnJlcCkgewogICAgc3NxcmVzMDc1ID0gYyhzc3FyZXMwNzUsIGxvZyhvdXRkZjIkQmFjdCkgLSBsb2coQXQwNzVbLGldKSkgCiAgfQogIAogIHNzcXJlcyA9IGMoc3NxcmVzMDEsc3NxcmVzMDc1KQogCiAgCiAgIyByZXR1cm4gcHJlZGljdGVkIHZzIGV4cGVyaW1lbnRhbCByZXNpZHVhbAogIHJldHVybihuYS5vbWl0KHNzcXJlcykpCn0KCgpzc3FNb25vUm9zQ3Rfb25seUNGVT1mdW5jdGlvbihwYXJtc2VzdEN0KXsKCiAgc3NxcmVzID0ge30KICB0aT1jKHNlcSgwLHRtYXgsMC4wMSksYygwLDEsMiwzLDYsNyw4KSkKICB0aT1zb3J0KHVuaXF1ZSh0aSkpCiAgCiAgI3Bhcm1zb2RlID0gYygxMF5wYXJtc2VzdEN0LHBhcm1zQ3RNTSxmaXRyb3NwYXIpCiAgcGFybXNvZGUgPSBwYXJtc2VzdEN0CiAgCiAgb3V0PW9kZSh5PWMoQmFjdD1DdDAxaW5pLE51PWNvbXBpbmksQ29tcD0wLjEsUm9zPXJvc2luaTAxKSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NNb25vQ3QscGFybXM9cGFybXNvZGUsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCiAgb3V0ZGY9ZGF0YS5mcmFtZShvdXQpCiAgb3V0ZGY9b3V0ZGZbb3V0ZGYkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmW291dGRmPGV4dF90aHJdPWV4dF90aHIKICBmb3IgKGkgaW4gMTpucmVwKSB7CiAgICBzc3FyZXMgPSBjKHNzcXJlcywgbG9nKG91dGRmJEJhY3QpIC0gbG9nKEN0MDFbLGldKSkKICB9CiAgCiAgCiAgb3V0Mj1vZGUoeT1jKEJhY3Q9Q3QwNzVpbmksTnU9Y29tcGluaSxDb21wPTAuNzUsUm9zPXJvc2luaTA3NSksdGltZXM9dGksZnVuYz1GdW5jUm9zTW9ub0N0LHBhcm1zPXBhcm1zb2RlLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQogIG91dGRmMj1kYXRhLmZyYW1lKG91dDIpCiAgb3V0ZGYyPW91dGRmMltvdXRkZjIkdGltZSAlaW4lIHRpbWUsXQogIG91dGRmMltvdXRkZjI8ZXh0X3Rocl09ZXh0X3RocgogIGZvciAoaSBpbiAxOm5yZXApIHsKICAgIHNzcXJlcyA9IGMoc3NxcmVzLCBsb2cob3V0ZGYyJEJhY3QpIC0gbG9nKEN0MDc1WyxpXSkpIAogIH0KICAKICAjIHJldHVybiBwcmVkaWN0ZWQgdnMgZXhwZXJpbWVudGFsIHJlc2lkdWFsCiAgcmV0dXJuKG5hLm9taXQoc3NxcmVzKSkKfQoKcGFybXRvdF8yID0gbGlzdChyYzEgPSAzLjQ5NDgyOCwKICAgICAgICAgICAgICAgS2MxID0gMC4wNDM5NDgyMywKICAgICAgICAgICAgICAgYmV0YTEgPSA4LjU4MDM2OSwKICAgICAgICAgICAgICAgWWMxID0gNTc4ODQzMzg3MywKICAgICAgICAgICAgICAgYWxwaGExID0gNC42MTI2NzFlLTA2LAogICAgICAgICAgICAgICBybjEgPSA1LjUxODE4MiwKICAgICAgICAgICAgICAgS24xID0gMC4wMDEwMzc5NCwKICAgICAgICAgICAgICAgWW4xID0gNDA3OTkzNDA0LAogICAgICAgICAgICAgICByYzIgPSAyLjM2ODMyNCwKICAgICAgICAgICAgICAgS2MyID0gMC4wNDg1NjM4NSwKICAgICAgICAgICAgICAgYmV0YTIgPSAyMC4wMzA1LAogICAgICAgICAgICAgICBZYzIgPSAxZSsxMCwKICAgICAgICAgICAgICAgYWxwaGEyID0gMCwKICAgICAgICAgICAgICAgcm4yID0gMTI2LjQ2MzMsCiAgICAgICAgICAgICAgIEtuMiA9IDAuMzU3MDkyNiwKICAgICAgICAgICAgICAgWW4yID0gMzI2NzQxOTIwLAogICAgICAgICAgICAgICBtID0gMC44NzkxNzEsCiAgICAgICAgICAgICAgIGQgPSAwLjExMzkxNjIsCiAgICAgICAgICAgICAgIGUgPSAxLjk0MTQwMSwKICAgICAgICAgICAgICAgbCA9IDAuMzQ2MjA2KQoKcGFyQXRfMiA9IGxpc3QocmMgPSAyLjM2ODMyNCwKICAgICAgICAgICAgICAgS2MgPSAwLjA0ODU2Mzg1LAogICAgICAgICAgICAgICBiZXRhID0gMjAuMDMwNSwKICAgICAgICAgICAgICAgWWMgPSAxZSsxMCwKICAgICAgICAgICAgICAgYWxwaGEgPSAwLAogICAgICAgICAgICAgICBybiA9IDEyNi40NjMzLAogICAgICAgICAgICAgICBLbiA9IDAuMzU3MDkyNiwKICAgICAgICAgICAgICAgWW4gPSAzMjY3NDE5MjAsCiAgICAgICAgICAgICAgIG0gPSAwLjg3OTE3MSwKICAgICAgICAgICAgICAgZCA9IDAuMTEzOTE2MiwKICAgICAgICAgICAgICAgZSA9IDEuOTQxNDAxLAogICAgICAgICAgICAgICBsID0gMC4zNDYyMDYpCgpwYXJDdF8yID0gbGlzdChyYyA9IDMuNDk0ODI4LAogICAgICAgICAgICAgICBLYyA9IDAuMDQzOTQ4MjMsCiAgICAgICAgICAgICAgIGJldGEgPSA4LjU4MDM2OSwKICAgICAgICAgICAgICAgWWMgPSA1Nzg4NDMzODczLAogICAgICAgICAgICAgICBhbHBoYSA9IDQuNjEyNjcxZS0wNiwKICAgICAgICAgICAgICAgcm4gPSA1LjUxODE4MiwKICAgICAgICAgICAgICAgS24gPSAwLjAwMTAzNzk0LAogICAgICAgICAgICAgICBZbiA9IDQwNzk5MzQwNCwKICAgICAgICAgICAgICAgbSA9IDAuODc5MTcxLAogICAgICAgICAgICAgICBkID0gMC4xMTM5MTYyLAogICAgICAgICAgICAgICBlID0gMS45NDE0MDEsCiAgICAgICAgICAgICAgIGwgPSAwLjM0NjIwNikKCiNzdW0oKHNzcU1vbm9Sb3NBdF9vbmx5Q0ZVKHBhckF0XzIpKV4yKSArIHN1bSgoc3NxTW9ub1Jvc0N0X29ubHlDRlUocGFyQ3RfMikpXjIpCgpgYGAKCmBgYHtyLGVjaG89RkFMU0UsZmlnLndpZHRoPTE1LGZpZy5oZWlnaHQ9MTB9CnBhcihtZnJvdz1jKDIsMikpCm91dD1vZGUoeT1jKEJhY3QgPSBBdDAxaW5pLE51PWNvbXBpbmksQ29tcCA9IDAuMSxSb3M9cm9zaW5pMDEpLHRpbWVzPXRpLGZ1bmM9RnVuY1Jvc01vbm9BdCxwYXJtcz1wYXJBdF8yLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpLGF0b2w9MWUtNSkKCnBsb3Qob3V0WywyXX5vdXRbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1jb2xBdFsyXSxsdHk9ImRvdHRlZCIseWxpbT1jKDEsMWUxMCksbG9nPSJ5IixtYWluPSJGaXR0aW5nIEF0IGluIG1vbm9jdWx0dXJlIChtb2RlbCAyKSIpCm91dD1vZGUoeT1jKEJhY3QgPSBBdDA3NWluaSxOdT1jb21waW5pLENvbXAgPTAuNzUsUm9zPXJvc2luaTA3NSksdGltZXM9dGksZnVuYz1GdW5jUm9zTW9ub0F0LHBhcm1zPXBhckF0XzIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSksYXRvbD0xZS01KQpwb2ludHMob3V0WywyXX5vdXRbLDFdLHR5cGU9ImwiLGx3ZD01LGNvbD1jb2xBdFs0XSxsdHk9ImRvdHRlZCIpCgpwb2ludHMoQXQwMVssMV1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpwb2ludHMoQXQwMVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzNdLHRyYW5zcGFyKSkKbGluZXMoQXQwMVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpwb2ludHMoQXQwMVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzNdLHRyYW5zcGFyKSkKbGluZXMoQXQwMVssM11+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpwb2ludHMoQXQwMVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzJdLHRyYW5zcGFyKSkKCmxpbmVzKEF0MDc1WywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yKQpwb2ludHMoQXQwNzVbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSwwLjUpLGx3ZD0yKQpsaW5lcyhBdDA3NVssMl1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQXRbNF0sMC41KSxsd2Q9MikKcG9pbnRzKEF0MDc1WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sMC41KSxsd2Q9MikKbGluZXMoQXQwNzVbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEF0WzRdLDAuNSksbHdkPTIpCnBvaW50cyhBdDA3NVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLDAuNSksbHdkPTIpCmxlZ2VuZCgiYm90dG9tbGVmdCIsbGVnZW5kPWMoIjAuMSUiLCIwLjc1JSIpLGNvbD1jKGNvbEF0WzJdLGNvbEF0WzRdKSxwY2g9MTksYnR5PSJuIixsd2Q9MikKCgoKcGxvdChDdDAxWywxXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhcikseWxhYj0iQ0ZVL21MICIsbG9nPSJ5Iix5bGltPWMoMWU0LDFlMTApLG1haW49IkZpdHRpbmcgQ3QgaW4gbW9ub2N1bHR1cmUgKG1vZGVsIDIpIikKcG9pbnRzKEN0MDFbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFszXSx0cmFuc3BhcikpCmxpbmVzKEN0MDFbLDJdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEN0MDFbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFszXSx0cmFuc3BhcikpCmxpbmVzKEN0MDFbLDNdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzJdLHRyYW5zcGFyKSkKcG9pbnRzKEN0MDFbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFsyXSx0cmFuc3BhcikpCgpsaW5lcyhDdDA3NVssMV1+dGltZSx0eXBlPSJsIixjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MikKcG9pbnRzKEN0MDc1WywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9MikKbGluZXMoQ3QwNzVbLDJdfnRpbWUsdHlwZT0ibCIsY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIpCnBvaW50cyhDdDA3NVssMl1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLDAuNSksbHdkPTIpCmxpbmVzKEN0MDc1WywzXX50aW1lLHR5cGU9ImwiLGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yKQpwb2ludHMoQ3QwNzVbLDNdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yKQpsZWdlbmQoImJvdHRvbXJpZ2h0IixsZWdlbmQ9YygiMC4xJSIsIjAuNzUlIiksY29sPWMoY29sQ3RbMl0sY29sQ3RbNF0pLHBjaD0xOSxidHk9Im4iLGx3ZD0yKQoKb3V0PW9kZSh5PWMoQmFjdCA9IEN0MDFpbmksTnU9Y29tcGluaSxDb21wID0gMC4xLFJvcz1yb3NpbmkwMSksdGltZXM9dGksZnVuYz1GdW5jUm9zTW9ub0N0LHBhcm1zPXBhckN0XzIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCnBvaW50cyhvdXRbLDJdfm91dFssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWNvbEN0WzJdLGx0eT0iZG90dGVkIikKb3V0PW9kZSh5PWMoQmFjdCA9IEN0MDc1aW5pLE51PWNvbXBpbmksQ29tcCA9IDAuNzUsUm9zPXJvc2luaTA3NSksdGltZXM9dGksZnVuYz1GdW5jUm9zTW9ub0N0LHBhcm1zPXBhckN0XzIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0aSkpCnBvaW50cyhvdXRbLDJdfm91dFssMV0sdHlwZT0ibCIsbHdkPTUsY29sPWNvbEN0WzRdLGx0eT0iZG90dGVkIikKCgpjb2N1bHQxID0gb2RlKHk9YyhCYWN0MSA9IEN0QXQwMWluaSxCYWN0MiA9IEF0Q3QwMWluaSxOdT1jb21waW5pLENvbXAgPSAwLjEsUm9zPXJvc2luaTAxKSx0aW1lcz10aSxmdW5jPUZ1bmNSb3NDbyxwYXJtcz0gcGFybXRvdF8yLGV2ZW50cyA9IGxpc3QoZnVuYyA9IGV2ZW50ZnVuLCB0aW1lID0gdGkpKQoKY29jdWx0MiA9IG9kZSh5PWMoQmFjdDEgPSBDdEF0MDc1aW5pLEJhY3QyID0gQXRDdDA3NWluaSxOdT1jb21waW5pLENvbXAgPSAwLjc1LFJvcz1yb3NpbmkwNzUpLHRpbWVzPXRpLGZ1bmM9RnVuY1Jvc0NvLHBhcm1zPXBhcm10b3RfMixldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHRpKSkKCgpwbG90KEN0QXQwMVssMV1+dGltZSxjb2w9YWxwaGEoY29sQ3RbMl0sMC41KSxsd2Q9Mix0eXBlPSJsIix5bGltPWMoMWU0LDFlMTApLGxvZz0ieSIsbHR5PSJzb2xpZCIsIHlsYWI9IkNGVS9tTCIsbWFpbj0iQ29jdWx0dXJlcyBhdCAwLjElIixidHk9Im4iKQpwb2ludHMoQ3RBdDAxWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQpwb2ludHMoQ3RBdDAxWywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQpwb2ludHMoQ3RBdDAxWywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbMl0sdHJhbnNwYXIpKQpsaW5lcyhDdEF0MDFbLDJdfnRpbWUsY29sPWFscGhhKGNvbEN0WzJdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmxpbmVzKEN0QXQwMVssM11+dGltZSxjb2w9YWxwaGEoY29sQ3RbMl0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKbGluZXMoQXRDdDAxWywxXX50aW1lLGNvbD1hbHBoYShjb2xBdFsyXSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpwb2ludHMoQXRDdDAxWywxXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpwb2ludHMoQXRDdDAxWywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpwb2ludHMoQXRDdDAxWywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbMl0sdHJhbnNwYXIpKQpsaW5lcyhBdEN0MDFbLDJdfnRpbWUsY29sPWFscGhhKGNvbEF0WzJdLDAuNSksbHdkPTIsbHR5PSJzb2xpZCIpCmxpbmVzKEF0Q3QwMVssM11+dGltZSxjb2w9YWxwaGEoY29sQXRbMl0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKCmxpbmVzKEJhY3QxfnRpbWUsY29jdWx0MSxjb2w9Y29sQ3RbMl0sbHR5PSJkb3R0ZWQiLGx3ZD0zKQpsaW5lcyhCYWN0Mn50aW1lLGNvY3VsdDEsY29sPWNvbEF0WzJdLGx0eT0iZG90dGVkIixsd2Q9MykKbGVnZW5kKCJib3R0b21yaWdodCIsbGVnZW5kPWMoIkN0KEF0KSAoZGF0YSkiLCJBdChDdCkgKGRhdGEpIiwiQ3QoQXQpIChwcmVkaWN0aW9uKSIsIkF0KEN0KSAocHJlZGljdGlvbikiKSxjb2w9YyhhbHBoYShjb2xDdFsyXSwwLjUpLGFscGhhKGNvbEF0WzJdLDAuNSksY29sQ3RbMl0sY29sQXRbMl0pLGx0eT1jKCJzb2xpZCIsInNvbGlkIiwiZG90dGVkIiwiZG90dGVkIiksbHdkPWMoMiwyLDIsMiksYnR5PSJuIixjZXg9MC44KQoKCnBsb3QoQ3RBdDA3NVssMV1+dGltZSxjb2w9YWxwaGEoY29sQ3RbNF0sMC41KSxsd2Q9Mix0eXBlPSJsIixsb2c9InkiLHlsaW09YygxZTQsMWUxMCksbHR5PSJzb2xpZCIseWxhYj0iQ0ZVL21MIixtYWluPSJDb2N1bHR1cmVzIGF0IDAuNzUlIixidHk9Im4iKQpwb2ludHMoQ3RBdDA3NVssMV1+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEN0WzRdLHRyYW5zcGFyKSkKcG9pbnRzKEN0QXQwNzVbLDJdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xDdFs0XSx0cmFuc3BhcikpCnBvaW50cyhDdEF0MDc1WywzXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQ3RbNF0sdHJhbnNwYXIpKQpsaW5lcyhDdEF0MDc1WywyXX50aW1lLGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpsaW5lcyhDdEF0MDc1WywzXX50aW1lLGNvbD1hbHBoYShjb2xDdFs0XSwwLjUpLGx3ZD0yLGx0eT0ic29saWQiKQpwb2ludHMoQXRDdDA3NVssMV1+dGltZSxjb2w9YWxwaGEoY29sQXRbNF0sMC41KSxsd2Q9Mix0eXBlPSJsIixsdHk9InNvbGlkIikKcG9pbnRzKEF0Q3QwNzVbLDFdfnRpbWUsdHlwZT0icCIscGNoPTE5LGNvbD1hbHBoYShjb2xBdFs0XSx0cmFuc3BhcikpCnBvaW50cyhBdEN0MDc1WywyXX50aW1lLHR5cGU9InAiLHBjaD0xOSxjb2w9YWxwaGEoY29sQXRbNF0sdHJhbnNwYXIpKQpwb2ludHMoQXRDdDA3NVssM11+dGltZSx0eXBlPSJwIixwY2g9MTksY29sPWFscGhhKGNvbEF0WzRdLHRyYW5zcGFyKSkKbGluZXMoQXRDdDA3NVssMl1+dGltZSxjb2w9YWxwaGEoY29sQXRbNF0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKbGluZXMoQXRDdDA3NVssM11+dGltZSxjb2w9YWxwaGEoY29sQXRbNF0sMC41KSxsd2Q9MixsdHk9InNvbGlkIikKCnBvaW50cyhCYWN0MX50aW1lLGNvY3VsdDIsdHlwZT0ibCIsY29sPWNvbEN0WzRdLGx3ZD01LGx0eT0iZG90dGVkIikKcG9pbnRzKEJhY3QyfnRpbWUsY29jdWx0Mix0eXBlPSJsIixjb2w9Y29sQXRbNF0sbHdkPTUsbHR5PSJkb3R0ZWQiKQpsZWdlbmQoImJvdHRvbXJpZ2h0IixsZWdlbmQ9YygiQ3QoQXQpIChkYXRhKSIsIkF0KEN0KSAoZGF0YSkiLCJDdChBdCkgKHByZWRpY3Rpb24pIiwiQXQoQ3QpIChwcmVkaWN0aW9uKSIpLGNvbD1jKGFscGhhKGNvbEN0WzRdLDAuNSksYWxwaGEoY29sQXRbNF0sMC41KSxjb2xDdFs0XSxjb2xBdFs0XSksbHR5PWMoInNvbGlkIiwic29saWQiLCJkb3R0ZWQiLCJkb3R0ZWQiKSxsd2Q9YygyLDIsMywzKSxidHk9Im4iLGNleD0wLjgpCgojIyBDb21wdXRlIHRoZSBlcnJvciBvZiBtb2RlbCAyIChzdW0gb2Ygc3F1YXJlcykKI2Vycm9yIGF0IDAuMSUKY29jdWx0MWRmPWRhdGEuZnJhbWUoY29jdWx0MSkKY29jdWx0MWRmPWNvY3VsdDFkZltjb2N1bHQxZGYkdGltZSAlaW4lIHRpbWUsXQpjb2N1bHQxZGZbY29jdWx0MWRmPGV4dF90aHJdPWV4dF90aHIKc3NxY29jdWx0MSA9IHt9CmZvciAoaSBpbiAxOm5yZXApIHsKICBzc3Fjb2N1bHQxID0gYyhzc3Fjb2N1bHQxLCBsb2coY29jdWx0MWRmJEJhY3QxKSAtIGxvZyhDdEF0MDFbLGldKSwgbG9nKGNvY3VsdDFkZiRCYWN0MikgLSBsb2coQXRDdDAxWyxpXSkpICNhZGQgcmVzaWR1YWwgY29tcGFyaW5nIGVzdGltYXRlZCB3aXRoIHRoZSBkaWZmZXJlbnQgcmVwbGljYXRlcwp9CnByaW50KHBhc3RlKCJTdW0gb2YgZXJyb3JzIGF0IDAuMSU6ICIsIHN1bShzc3Fjb2N1bHQxXjIpKSkKCiNlcnJvciBhdCAwLjc1JQpjb2N1bHQyZGY9ZGF0YS5mcmFtZShjb2N1bHQyKQpjb2N1bHQyZGY9Y29jdWx0MmRmW2NvY3VsdDJkZiR0aW1lICVpbiUgdGltZSxdCmNvY3VsdDJkZltjb2N1bHQyZGY8ZXh0X3Rocl09ZXh0X3Rocgpzc3Fjb2N1bHQyID0ge30KZm9yIChpIGluIDE6bnJlcCkgewogIHNzcWNvY3VsdDIgPSBjKHNzcWNvY3VsdDIsIGxvZyhjb2N1bHQyZGYkQmFjdDEpIC0gbG9nKEN0QXQwNzVbLGldKSwgbG9nKGNvY3VsdDJkZiRCYWN0MikgLSBsb2coQXRDdDA3NVssaV0pKSAjYWRkIHJlc2lkdWFsIGNvbXBhcmluZyBlc3RpbWF0ZWQgd2l0aCB0aGUgZGlmZmVyZW50IHJlcGxpY2F0ZXMKfQpwcmludChwYXN0ZSgiU3VtIG9mIGVycm9ycyBhdCAwLjc1JTogIiwgc3VtKHNzcWNvY3VsdDJeMikpKQoKCnByaW50KHBhc3RlKCJUb3RhbCBzdW0gb2YgZXJyb3JzOiAiLCBzdW0oc3NxY29jdWx0Ml4yKStzdW0oc3NxY29jdWx0MV4yKSkpCgpgYGAKCiMjIyAyLjcgRXhhbXBsZSBvZiB0cmFuc2ZlciB0cmFqZWN0b3J5CgpgYGB7cixlY2hvPUZBTFNFLGZpZy53aWR0aD0xMixmaWcuaGVpZ2h0PTZ9CmR1ciA9IDMKdCA9IHNlcSgwLGR1ciwwLjAxKQpkaWwgPSAxMDAKCnBhcnRyYW5zZmVyID0gcGFybXRvdF8yCm5hbWVzPWMoInRpbWUiLCJDdCIsIkF0IiwiTnUiLCJDb21wIiwiUm9zIikKdHJhbnNmZXJBdG1vbm9fMDE9bWF0cml4KG5jb2w9Nixucm93PTApCnRyYW5zZmVyQ3Rtb25vXzAxPW1hdHJpeChuY29sPTYsbnJvdz0wKQp0cmFuc2ZlcmNvXzAxPW1hdHJpeChuY29sPTYsbnJvdz0wKQoKQXQwMW1vbm9fc3RhcnQgPSAxZTYKQ3QwMW1vbm9fc3RhcnQgPSAxZTUKQXR3Q3QwMV9zdGFydCA9IDFlNgpDdHdBdDAxX3N0YXJ0ID0gMWU1CgoKdHJhbnNmZXJBdG1vbm9fMDc1PW1hdHJpeChuY29sPTYsbnJvdz0wKQp0cmFuc2ZlckN0bW9ub18wNzU9bWF0cml4KG5jb2w9Nixucm93PTApCnRyYW5zZmVyY29fMDc1PW1hdHJpeChuY29sPTYsbnJvdz0wKQoKQXQwNzVtb25vX3N0YXJ0ID0gMWU2CkN0MDc1bW9ub19zdGFydCA9IDFlNQpBdHdDdDA3NV9zdGFydCA9IDFlNgpDdHdBdDA3NV9zdGFydCA9IDFlNQoKCm5idHJhbnNmZXIgPSA4Cgpmb3IgKGkgaW4gMTpuYnRyYW5zZmVyKXsKICAKICAgIG91dGNvMDE9b2RlKHk9YyhCYWN0MSA9IEN0d0F0MDFfc3RhcnQsQmFjdDIgPSBBdHdDdDAxX3N0YXJ0LE51PWNvbXBpbmksQ29tcCA9IDAuMSxSb3M9cm9zaW5pMDEpLHRpbWVzPXQsZnVuYz1GdW5jUm9zQ28scGFybXM9cGFydHJhbnNmZXIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0KSkKICAgIHRyYW5zZmVyY29fMDEgPSByYmluZCh0cmFuc2ZlcmNvXzAxLG91dGNvMDEpCiAgICBDdHdBdDAxX3N0YXJ0ID0gYXMuZGF0YS5mcmFtZShvdXRjbzAxKSRCYWN0MVtsZW5ndGgoYXMuZGF0YS5mcmFtZShvdXRjbzAxKSRCYWN0MSldIC8gZGlsCiAgICBBdHdDdDAxX3N0YXJ0ID0gYXMuZGF0YS5mcmFtZShvdXRjbzAxKSRCYWN0MltsZW5ndGgoYXMuZGF0YS5mcmFtZShvdXRjbzAxKSRCYWN0MildIC8gZGlsCiAgICAKICAgIG91dG1vbm9BdDAxPW9kZSh5PWMoQmFjdDEgPSAwLEJhY3QyID0gQXQwMW1vbm9fc3RhcnQsTnU9Y29tcGluaSxDb21wID0gMC4xLFJvcz1yb3NpbmkwMSksdGltZXM9dCxmdW5jPUZ1bmNSb3NDbyxwYXJtcz1wYXJ0cmFuc2ZlcixldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHQpKQogICAgdHJhbnNmZXJBdG1vbm9fMDEgPSByYmluZCh0cmFuc2ZlckF0bW9ub18wMSxvdXRtb25vQXQwMSkKICAgIEF0MDFtb25vX3N0YXJ0ID0gYXMuZGF0YS5mcmFtZShvdXRtb25vQXQwMSkkQmFjdDJbbGVuZ3RoKGFzLmRhdGEuZnJhbWUob3V0bW9ub0F0MDEpJEJhY3QyKV0gLyBkaWwKICAgCiAgICBvdXRtb25vQ3QwMT1vZGUoeT1jKEJhY3QxID0gQ3QwMW1vbm9fc3RhcnQsQmFjdDIgPSAwLE51PWNvbXBpbmksQ29tcCA9IDAuMSxSb3M9cm9zaW5pMDEpLHRpbWVzPXQsZnVuYz1GdW5jUm9zQ28scGFybXM9cGFydHJhbnNmZXIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0KSkKICAgIHRyYW5zZmVyQ3Rtb25vXzAxID0gcmJpbmQodHJhbnNmZXJDdG1vbm9fMDEsb3V0bW9ub0N0MDEpCiAgICBDdDAxbW9ub19zdGFydCA9IGFzLmRhdGEuZnJhbWUob3V0bW9ub0N0MDEpJEJhY3QxW2xlbmd0aChhcy5kYXRhLmZyYW1lKG91dG1vbm9DdDAxKSRCYWN0MSldIC8gZGlsCiAgICAKICAgIAogICAgCiAgICBvdXRjbzA3NT1vZGUoeT1jKEJhY3QxID0gQ3R3QXQwNzVfc3RhcnQsQmFjdDIgPSBBdHdDdDA3NV9zdGFydCxOdT1jb21waW5pLENvbXAgPSAwLjc1LFJvcz1yb3NpbmkwNzUpLHRpbWVzPXQsZnVuYz1GdW5jUm9zQ28scGFybXM9cGFydHJhbnNmZXIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0KSkKICAgIHRyYW5zZmVyY29fMDc1ID0gcmJpbmQodHJhbnNmZXJjb18wNzUsb3V0Y28wNzUpCiAgICBDdHdBdDA3NV9zdGFydCA9IGFzLmRhdGEuZnJhbWUob3V0Y28wNzUpJEJhY3QxW2xlbmd0aChhcy5kYXRhLmZyYW1lKG91dGNvMDc1KSRCYWN0MSldIC8gZGlsCiAgICBBdHdDdDA3NV9zdGFydCA9IGFzLmRhdGEuZnJhbWUob3V0Y28wNzUpJEJhY3QyW2xlbmd0aChhcy5kYXRhLmZyYW1lKG91dGNvMDc1KSRCYWN0MildIC8gZGlsCiAgICAKICAgIG91dG1vbm9BdDA3NT1vZGUoeT1jKEJhY3QxID0gMCxCYWN0MiA9IEF0MDc1bW9ub19zdGFydCxOdT1jb21waW5pLENvbXAgPSAwLjc1LFJvcz1yb3NpbmkwNzUpLHRpbWVzPXQsZnVuYz1GdW5jUm9zQ28scGFybXM9cGFydHJhbnNmZXIsZXZlbnRzID0gbGlzdChmdW5jID0gZXZlbnRmdW4sIHRpbWUgPSB0KSkKICAgIHRyYW5zZmVyQXRtb25vXzA3NSA9IHJiaW5kKHRyYW5zZmVyQXRtb25vXzA3NSxvdXRtb25vQXQwNzUpCiAgICBBdDA3NW1vbm9fc3RhcnQgPSBhcy5kYXRhLmZyYW1lKG91dG1vbm9BdDA3NSkkQmFjdDJbbGVuZ3RoKGFzLmRhdGEuZnJhbWUob3V0bW9ub0F0MDc1KSRCYWN0MildIC8gZGlsCiAgIAogICAgb3V0bW9ub0N0MDc1PW9kZSh5PWMoQmFjdDEgPSBDdDA3NW1vbm9fc3RhcnQsQmFjdDIgPSAwLE51PWNvbXBpbmksQ29tcCA9IDAuNzUsUm9zPXJvc2luaTA3NSksdGltZXM9dCxmdW5jPUZ1bmNSb3NDbyxwYXJtcz1wYXJ0cmFuc2ZlcixldmVudHMgPSBsaXN0KGZ1bmMgPSBldmVudGZ1biwgdGltZSA9IHQpKQogICAgdHJhbnNmZXJDdG1vbm9fMDc1ID0gcmJpbmQodHJhbnNmZXJDdG1vbm9fMDc1LG91dG1vbm9DdDA3NSkKICAgIEN0MDc1bW9ub19zdGFydCA9IGFzLmRhdGEuZnJhbWUob3V0bW9ub0N0MDc1KSRCYWN0MVtsZW5ndGgoYXMuZGF0YS5mcmFtZShvdXRtb25vQ3QwNzUpJEJhY3QxKV0gLyBkaWwKICAgIAogICAgdCA9IHQgKyBkdXIKfQpgYGAKCmBgYHtyLGVjaG89RkFMU0V9CnRyYW5zZmVyY29fMDEgPSBhcy5kYXRhLmZyYW1lKHRyYW5zZmVyY29fMDEpCnRyYW5zZmVyQ3Rtb25vXzAxID0gYXMuZGF0YS5mcmFtZSh0cmFuc2ZlckN0bW9ub18wMSkKdHJhbnNmZXJBdG1vbm9fMDEgPSBhcy5kYXRhLmZyYW1lKHRyYW5zZmVyQXRtb25vXzAxKQoKdHJhbnNmZXJjb18wNzUgPSBhcy5kYXRhLmZyYW1lKHRyYW5zZmVyY29fMDc1KQp0cmFuc2ZlckN0bW9ub18wNzUgPSBhcy5kYXRhLmZyYW1lKHRyYW5zZmVyQ3Rtb25vXzA3NSkKdHJhbnNmZXJBdG1vbm9fMDc1ID0gYXMuZGF0YS5mcmFtZSh0cmFuc2ZlckF0bW9ub18wNzUpCmBgYAoKYGBge3IsZWNobz1GQUxTRX0KdHJhbnNmZXJjb18wMSRudHJhbnNmZXIgPSB0cmFuc2ZlcmNvXzAxJHRpbWUvMwp0cmFuc2ZlckF0bW9ub18wMSRudHJhbnNmZXIgPSB0cmFuc2ZlckF0bW9ub18wMSR0aW1lLzMKdHJhbnNmZXJDdG1vbm9fMDEkbnRyYW5zZmVyID0gdHJhbnNmZXJDdG1vbm9fMDEkdGltZS8zCgp0cmFuc2ZlcmNvXzA3NSRudHJhbnNmZXIgPSB0cmFuc2ZlcmNvXzA3NSR0aW1lLzMKdHJhbnNmZXJBdG1vbm9fMDc1JG50cmFuc2ZlciA9IHRyYW5zZmVyQXRtb25vXzA3NSR0aW1lLzMKdHJhbnNmZXJDdG1vbm9fMDc1JG50cmFuc2ZlciA9IHRyYW5zZmVyQ3Rtb25vXzA3NSR0aW1lLzMKCmBgYAoKYGBge3IsZWNobz1GQUxTRSxmaWcud2lkdGg9MTIsZmlnLmhlaWdodD02fQojcGRmKGZpbGUgPSAidHJhbnNmZXJ0cmFqLnBkZiIsd2lkdGg9MTAsaGVpZ2h0PTUpCnBhcihtZnJvdz1jKDEsMikpCnBsb3QodHJhbnNmZXJjb18wMSRudHJhbnNmZXIsdHJhbnNmZXJjb18wMSRCYWN0MSxsb2c9InkiLHR5cGU9ImwiLGNvbCA9IGNvbEN0WzJdLGx3ZD0yLHlsaW09YygxZTQsMWUxMCkseGxhYj0iVHJhbnNmZXIiLCB5bGFiID0gIkNGVS9tTCIsbHR5PSJkYXNoZWQiLG1haW49IlRyYW5zZmVyIHNpbXVsYXRpb24gaW4gMC4xJSBMQSIpCmxpbmVzKHRyYW5zZmVyY29fMDEkbnRyYW5zZmVyLHRyYW5zZmVyY29fMDEkQmFjdDIsdHlwZT0ibCIsY29sID0gY29sQXRbMl0sbHdkPTIsbHR5PSJkYXNoZWQiKQpsaW5lcyh0cmFuc2ZlckN0bW9ub18wMSRudHJhbnNmZXIsdHJhbnNmZXJDdG1vbm9fMDEkQmFjdDEsdHlwZT0ibCIsY29sID0gY29sQ3RbMl0sbHdkPTIpCmxpbmVzKHRyYW5zZmVyQXRtb25vXzAxJG50cmFuc2Zlcix0cmFuc2ZlckF0bW9ub18wMSRCYWN0Mix0eXBlPSJsIixjb2wgPSBjb2xBdFsyXSxsd2Q9MikKbGVnZW5kKCJib3R0b21yaWdodCIsbGVnZW5kPWMoIkN0IiwiQXQiLCJDdChBdCkiLCJBdChDdCkiKSxjb2w9Yyhjb2xDdFsyXSxjb2xBdFsyXSxjb2xDdFsyXSxjb2xBdFsyXSksbHR5PWMoInNvbGlkIiwic29saWQiLCJkYXNoZWQiLCJkYXNoZWQiKSxsd2Q9YygyLDIsMiwyKSxidHk9Im4iLGNleD0wLjgpCgoKCnBsb3QodHJhbnNmZXJjb18wNzUkbnRyYW5zZmVyLHRyYW5zZmVyY29fMDc1JEJhY3QxLGxvZz0ieSIsdHlwZT0ibCIsY29sID0gY29sQ3RbNF0sbHdkPTIseWxpbT1jKDFlNCwxZTEwKSx4bGFiPSJUcmFuc2ZlciIsIHlsYWIgPSAiQ0ZVL21MIixsdHk9ImRhc2hlZCIsbWFpbj0iVHJhbnNmZXIgc2ltdWxhdGlvbiBpbiAwLjc1JSBMQSIpCmxpbmVzKHRyYW5zZmVyY29fMDc1JG50cmFuc2Zlcix0cmFuc2ZlcmNvXzA3NSRCYWN0Mix0eXBlPSJsIixjb2wgPSBjb2xBdFs0XSxsd2Q9MixsdHk9ImRhc2hlZCIpCmxpbmVzKHRyYW5zZmVyQ3Rtb25vXzA3NSRudHJhbnNmZXIsdHJhbnNmZXJDdG1vbm9fMDc1JEJhY3QxLHR5cGU9ImwiLGNvbCA9IGNvbEN0WzRdLGx3ZD0yKQpsaW5lcyh0cmFuc2ZlckF0bW9ub18wNzUkbnRyYW5zZmVyLHRyYW5zZmVyQXRtb25vXzA3NSRCYWN0Mix0eXBlPSJsIixjb2wgPSBjb2xBdFs0XSxsd2Q9MikKbGVnZW5kKCJyaWdodCIsbGVnZW5kPWMoIkN0IiwiQXQiLCJDdChBdCkiLCJBdChDdCkiKSxjb2w9Yyhjb2xDdFs0XSxjb2xBdFs0XSxjb2xDdFs0XSxjb2xBdFs0XSksbHR5PWMoInNvbGlkIiwic29saWQiLCJkYXNoZWQiLCJkYXNoZWQiKSxsd2Q9YygyLDIsMiwyKSxidHk9Im4iLGNleD0wLjgpCgojZGV2Lm9mZigpCgpgYGAKYGBge3J9CmNvZXggPSByZWFkLmRlbGltKCJNb2RlbDJfY29jdWx0XzUudHh0IikKY29leCRmaW5zdGF0ZSA9IGFzLmZhY3Rvcihjb2V4JGZpbnN0YXRlKQptb2QyXzV0cmFuc2Y9Z2dwbG90KGRhdGE9Y29leCwgbWFwcGluZyA9IGFlcyh4ID1MQV9pbml0aWFsY29uYyAsIHkgPSBkaWx1LCBmaWxsPWZpbnN0YXRlKSkgKwogIGdlb21fcmFzdGVyKGFlcyhmaWxsID0gZmFjdG9yKGZpbnN0YXRlKSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzPWMoY29sQ3RbNF0sImdyZXkiLCJwaW5rIiwiZGFya2dyZWVuIiksCiAgICAgICAgICAgICAgICAgICAgIGFlc3RoZXRpY3MgPSBjKCJjb2xvdXIiLCAiZmlsbCIpLAogICAgICAgICAgICAgICAgICAgICBuYW1lID0gIlNwZWNpZXMgc3Vydml2aW5nIGFmdGVyIDUgdHJhbnNmZXJzIiwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWMoIkN0IGFsb25lIiwgIkV4dGluY3Rpb24gb2YgYm90aCIsICJDb2V4aXN0ZW5jZTogQ3QgYW5kIEF0IiwgIkF0IGFsb25lIiksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcz1jKCJDdCIsImV4dCIsImNvZXgiLCJBdCIpCiAgKSArCiAgeWxhYihleHByZXNzaW9uKCJUcmFuc2ZlciBkaWx1dGlvbiByYXRlIikpICsKICB4bGFiKGV4cHJlc3Npb24oIkluaXRpYWwgbGlub2xlaWMgYWNpZCBjb25jZW50cmF0aW9uIikpKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZT0xNSkpICsKICBsYWJzKHRpdGxlID0gIk1vZGVsIDIiKSArCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTUpKSsKICB0aGVtZShhc3BlY3QucmF0aW89MSkKbW9kMl81dHJhbnNmCmBgYAoK